| tRemove old Windows installer - vaccinewars - be a doctor and try to vaccinate the world |
| git clone git://src.adamsgaard.dk/vaccinewars |
| Log |
| Files |
| Refs |
| README |
| LICENSE |
| --- |
| commit c35ba28b21ec5a92791d0c3c3ae10180df2b4851 |
| parent e02dae44581855d88b21163f0ad6e6c72e7d162a |
| Author: Ben Webb |
| Date: Tue, 1 Dec 2020 21:12:12 -0800
Remove old Windows installer
Diffstat:
D win32/Makefile | 58 ------------------------------
M win32/README.md | 12 +++---------
D win32/bzlib/Makefile.nocygwin | 33 -------------------------------
D win32/bzlib/README.bzlib | 7 -------
D win32/contid.h | 18 ------------------
D win32/dialogs.rc | 75 -------------------------------
D win32/filelist | 108 -------------------------------
D win32/guifunc.c | 103 -------------------------------
D win32/guifunc.h | 26 --------------------------
D win32/makeinstall.c | 353 -------------------------------
D win32/setup.c | 1242 ------------------------------
D win32/setup.ico | 0
D win32/setup.manifest | 21 ---------------------
D win32/setup.rc | 8 --------
D win32/uninstall.c | 196 -------------------------------
D win32/uninstall.manifest | 21 ---------------------
D win32/uninstall.rc | 16 ----------------
D win32/util.c | 896 -------------------------------
D win32/util.h | 119 -------------------------------
D win32/zlib/Makefile.nocygwin | 154 -------------------------------
D win32/zlib/README.zlib | 6 ------
21 files changed, 3 insertions(+), 3469 deletions(-)
--- |
| diff --git a/win32/Makefile b/win32/Makefile |
| t@@ -1,58 +0,0 @@
-# Use these flags to use libbz2 for compression
-#LIBZ = bzlib/libbz2.a
-#COMPFLAGS = -DLIBBZ2
-
-# Use these flags to use libz for compression
-LIBZ = zlib/libz.a
-COMPFLAGS =
-
-CFLAGS = -Wall -mno-cygwin ${COMPFLAGS}
-
-all: setup makeinstall uninstall
-
-clean:
- /bin/rm -f *.o *.res uninstall.exe setup.exe makeinstall.exe core *~
- /bin/rm -f installfiles.z manifest
-
-setup: setup.o util.o guifunc.o setup.res
- gcc ${CFLAGS} -mwindows -o setup setup.o util.o guifunc.o setup.res ${LIBZ} -lcomctl32 -lole32 -luuid
- strip setup.exe
-
-uninstall: uninstall.o util.o guifunc.o uninstall.res
- gcc ${CFLAGS} -mwindows -o uninstall uninstall.o util.o guifunc.o uninstall.res
- strip uninstall.exe
-
-uninstall.o: uninstall.c util.h guifunc.h
- gcc ${CFLAGS} -c uninstall.c
-
-uninstall.res: uninstall.rc
- windres -O coff -o uninstall.res uninstall.rc
-
-setup.o: setup.c contid.h util.h guifunc.h
- gcc ${CFLAGS} -c setup.c
-
-util.o: util.c util.h
- gcc ${CFLAGS} -c util.c
-
-guifunc.o: guifunc.c guifunc.h
- gcc ${CFLAGS} -c guifunc.c
-
-manifest installfiles.z: filelist makeinstall uninstall
- sed -e 's/LICENCE/licence.txt/' < ../doc/index.html > index.html
- sed -e 's/LICENCE/licence.txt/' < ../doc/developer.html > developer.html
- sed -e 's/example-cfg/example-cfg.txt/' < ../doc/configfile.html > configfile.html
- awk '{gsub(/\f/, ""); print $$0."\r"}' < ../LICENCE > licence.txt
- awk '{print $$0."\r"}' < ../README > readme.txt
- awk '{print $$0."\r"}' < ../doc/example-cfg > example-cfg.txt
- ./makeinstall
- /bin/rm -f index.html configfile.html developer.html licence.txt
- /bin/rm -f example-cfg.txt readme.txt
-
-setup.res: setup.rc dialogs.rc contid.h manifest installfiles.z
- windres -O coff -o setup.res setup.rc
-
-makeinstall: makeinstall.o util.o
- gcc ${CFLAGS} -o makeinstall makeinstall.o util.o ${LIBZ}
-
-makeinstall.o: makeinstall.c util.h
- gcc ${CFLAGS} -c makeinstall.c |
| diff --git a/win32/README.md b/win32/README.md |
| t@@ -1,7 +1,5 @@
## Building dopewars on Windows
-(This is experimental.)
-
dopewars is built for Windows via cross-compilation on Linux using the
MinGW tools. See the `mingw` subdirectory for a suitable `Dockerfile` to set up
a [Docker](https://www.docker.com/) or [Podman](https://podman.io/)
t@@ -22,10 +20,6 @@ the same directory as `dopewars.exe`.
## Windows installer
-This directory contains the code for a simple Windows install/uninstall
-package. The `makeinstall` program takes a list of files (in `filelist`) to
-install, and produces a compressed copy of these files, which are placed
-into the resources of the `setup` program. This program installs the listed
-files to a target machine, and sets up the necessary registry keys for the
-`uninstall` program to then be able to remove those files again. The only
-file that should need to be distributed, therefore, is `setup.exe`.
+The top-level `configure` script will also generate `install.nsi` in this
+directory. This can be used as input to
+[NSIS](https://nsis.sourceforge.io/) to build a Windows installer. |
| diff --git a/win32/bzlib/Makefile.nocygwin b/win32/bzlib/Makefile.nocygwin |
| t@@ -1,33 +0,0 @@
-
-SHELL=/bin/sh
-
-# To assist in cross-compiling
-CC=gcc
-AR=ar
-RANLIB=ranlib
-LDFLAGS=
-
-# Suitably paranoid flags to avoid bugs in gcc-2.7
-BIGFILES=-D_FILE_OFFSET_BITS=64
-CFLAGS=-mno-cygwin -Wall -Winline -O2 -fomit-frame-pointer -fno-strength-reduce -DBZ_NO_STDIO $(BIGFILES)
-
-# Where you want it installed when you do 'make install'
-PREFIX=/usr
-
-
-OBJS= blocksort.o \
- huffman.o \
- crctable.o \
- randtable.o \
- compress.o \
- decompress.o \
- bzlib.o
-
-libbz2.a: $(OBJS)
- rm -f libbz2.a
- $(AR) cq libbz2.a $(OBJS)
- @if ( test -f $(RANLIB) -o -f /usr/bin/ranlib -o \
- -f /bin/ranlib -o -f /usr/ccs/bin/ranlib ) ; then \
- echo $(RANLIB) libbz2.a ; \
- $(RANLIB) libbz2.a ; \
- fi |
| diff --git a/win32/bzlib/README.bzlib b/win32/bzlib/README.bzlib |
| t@@ -1,7 +0,0 @@
-If you are intending to build the Win32 installer for dopewars, then place
-the bzlib distribution (from http://sources.redhat.com/bzip2/) into this
-directory. The installer expects to statically link with the file libbz2.a
-in this directory; the libbz2.a file included in the Cygwin distribution
-should _not_ be used, as this requires the CYGWIN.DLL file, which is not
-a standard Windows DLL. Use the Makefile.nocygwin file to compile bzlib,
-as this adds in the -mno-cygwin flag. |
| diff --git a/win32/contid.h b/win32/contid.h |
| t@@ -1,18 +0,0 @@
-#define BT_BACK 201
-#define BT_NEXT 202
-#define BT_CANCEL 203
-#define BT_FINISH 204
-#define BT_BROWSE 205
-#define ED_LICENCE 206
-#define ST_FILELIST 207
-#define ST_COMPLETE 208
-#define ST_EXIT 209
-#define ED_FOLDER 210
-#define LB_FOLDLIST 211
-#define CB_DESKTOP 212
-#define ED_INSTDIR 213
-#define ST_DELSTAT 214
-#define ST_DELDONE 215
-#define BT_DELOK 216
-#define RB_ALLUSERS 217
-#define RB_ONEUSER 218 |
| diff --git a/win32/dialogs.rc b/win32/dialogs.rc |
| t@@ -1,75 +0,0 @@
-#include "contid.h"
-1 DIALOG 17, 40, 239, 162
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "dopewars-1.5.12 installation"
-BEGIN
- CONTROL "", 101, "WC_GTKSEP", 2 | WS_CHILD | WS_VISIBLE, 7, 135, 225, 2
- CONTROL "< &Back", BT_BACK, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 105, 143, 39, 13
- PUSHBUTTON "&Next >", BT_NEXT, 144, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- PUSHBUTTON "&Cancel", BT_CANCEL, 191, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- LTEXT "Welcome to the dopewars-1.5.12 installation program.\nThis program will install dopewars-1.5.12 on your computer.", -1, 22, 14, 195, 17, WS_CHILD | WS_VISIBLE | WS_GROUP
- LTEXT "Use the ""Back"" and ""Next"" buttons at the bottom of the dialog to control the installation. You can quit at any time using the ""Cancel"" button.", -1, 22, 50, 195, 25, WS_CHILD | WS_VISIBLE | WS_GROUP
- LTEXT "Newer versions of this program, when available, can be obtained from the dopewars website, http://dopewars.sf.net/", -1, 22, 84, 195, 18, WS_CHILD | WS_VISIBLE | WS_GROUP
- CONTROL "Install for &all users (requires admin rights)", RB_ALLUSERS, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 28, 108, 110, 8
- CONTROL "Install for c&urrent user only", RB_ONEUSER, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 28, 120, 108, 8
-END
-2 DIALOG 17, 40, 239, 162
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "License"
-BEGIN
- CONTROL "", 101, "WC_GTKSEP", 2 | WS_CHILD | WS_VISIBLE, 7, 135, 225, 2
- PUSHBUTTON "< &Back", BT_BACK, 105, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- PUSHBUTTON "&Next >", BT_NEXT, 144, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- PUSHBUTTON "&Cancel", BT_CANCEL, 191, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- LTEXT "dopewars is released under the terms of the GNU General Public License (GPL). Please take a moment to review the terms of this license before continuing.", -1, 22, 14, 195, 25, WS_CHILD | WS_VISIBLE | WS_GROUP
- CONTROL "", ED_LICENCE, "EDIT", ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | WS_VSCROLL, 22, 45, 195, 75
-END
-
-4 DIALOG 17, 40, 239, 162
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Installation directory"
-BEGIN
- CONTROL "", 101, "WC_GTKSEP", 2 | WS_CHILD | WS_VISIBLE, 7, 135, 225, 2
- PUSHBUTTON "< &Back", BT_BACK, 105, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- PUSHBUTTON "&Next >", BT_NEXT, 144, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- PUSHBUTTON "&Cancel", BT_CANCEL, 191, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- LTEXT "dopewars will be installed into the directory given below.", -1, 22, 14, 195, 9, WS_CHILD | WS_VISIBLE | WS_GROUP
- LTEXT "To install in this directory, select ""Next"".", -1, 22, 33, 195, 9, WS_CHILD | WS_VISIBLE | WS_GROUP
- LTEXT "To install in a different directory, enter the new directory into the box below, using the ""Browse"" button if necessary.", -1, 22, 51, 195, 35, WS_CHILD | WS_VISIBLE | WS_GROUP
- GROUPBOX "Destination directory", 105, 22, 84, 195, 35, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- CONTROL "", ED_INSTDIR, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 27, 99, 142, 10
- PUSHBUTTON "B&rowse...", BT_BROWSE, 173, 98, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
-END
-
-
-5 DIALOG 17, 40, 239, 162
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Installing..."
-BEGIN
- CONTROL "", 101, "WC_GTKSEP", 2 | WS_CHILD | WS_VISIBLE, 7, 135, 225, 2
- CONTROL "< &Back", BT_BACK, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 105, 143, 39, 13
- PUSHBUTTON "&Finish", BT_FINISH, 144, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- CONTROL "&Cancel", BT_CANCEL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 191, 143, 39, 13
- LTEXT "Please wait while all program files are installed.", -1, 22, 14, 195, 12, WS_CHILD | WS_VISIBLE | WS_GROUP
- LTEXT "Installing file:", ST_FILELIST, 22, 38, 195, 16, WS_CHILD | WS_VISIBLE | WS_GROUP
- LTEXT "dopewars installation is complete. Click the ""Finish"" button to leave the installation program.", ST_COMPLETE, 22, 63, 195, 18, WS_CHILD | WS_GROUP
- LTEXT "Don't forget to check the dopewars website, http://dopewars.sf.net/, for further information and for newer versions of this software. Hope you enjoy the game!", ST_EXIT, 22, 92, 195, 26, WS_CHILD | WS_GROUP
-END
-
-mainicon ICON "setup.ico"
-
-3 DIALOG 17, 40, 239, 162
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Shortcuts"
-BEGIN
- LTEXT "Program icons will be added to the Program Folder on the Start Menu shown below. You can enter a new folder name, or select one from the Existing Folders list.", -1, 22, 7, 195, 25, WS_CHILD | WS_VISIBLE | WS_GROUP
- LTEXT "&Program Folder:", -1, 22, 35, 68, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
- CONTROL "", ED_FOLDER, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 22, 45, 195, 10
- LTEXT "E&xisting Folders:", -1, 22, 61, 92, 8, WS_CHILD | WS_VISIBLE | WS_GROUP
- CONTROL "", LB_FOLDLIST, "LISTBOX", LBS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 22, 71, 195, 46
- CONTROL "C&reate desktop icons as well", CB_DESKTOP, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 22, 121, 110, 10
- CONTROL "", 101, "WC_GTKSEP", 2 | WS_CHILD | WS_VISIBLE, 7, 135, 225, 2
- PUSHBUTTON "< &Back", BT_BACK, 105, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- PUSHBUTTON "&Next >", BT_NEXT, 144, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- PUSHBUTTON "&Cancel", BT_CANCEL, 191, 143, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
-END |
| diff --git a/win32/filelist b/win32/filelist |
| t@@ -1,108 +0,0 @@
-[product]
-dopewars-1.5.12
-
-[instdir]
-dopewars-1.5.12
-
-[NT Service]
-dopewars-server
-dopewars server
-Server for the drug-dealing game "dopewars"
-dopewars.exe -N
-
-[install]
-licence.txt
-uninstall.exe
-../doc/aiplayer.html -> aiplayer.html
-../doc/clientplay.html -> clientplay.html
-../doc/commandline.html -> commandline.html
-../doc/contribute.html -> contribute.html
-configfile.html
-../doc/credits.html -> credits.html
-developer.html
-../doc/i18n.html -> i18n.html
-index.html
-../doc/installation.html -> installation.html
-../doc/metaserver.html -> metaserver.html
-../doc/protocol.html -> protocol.html
-../doc/server.html -> server.html
-../doc/servercommands.html -> servercommands.html
-../doc/windows.html -> windows.html
-../doc/help/general.html -> help\general.html
-../doc/help/locations.html -> help\locations.html
-../doc/help/drugs.html -> help\drugs.html
-../doc/help/guns.html -> help\guns.html
-../doc/help/cops.html -> help\cops.html
-../doc/help/server.html -> help\server.html
-../doc/help/sounds.html -> help\sounds.html
-../../auxdope/dopewars-config.txt -> dopewars-config.txt
-../src/dopewars.exe -> dopewars.exe
-../../auxdope/iconv.dll -> iconv.dll
-../../auxdope/intl.dll -> intl.dll
-../../auxdope/libglib-2.0-0.dll -> libglib-2.0-0.dll
-readme.txt
-example-cfg.txt
-../po/pt_BR.gmo -> locale\pt_BR\LC_MESSAGES\dopewars.mo
-../po/fr.gmo -> locale\fr\LC_MESSAGES\dopewars.mo
-../po/de.gmo -> locale\de\LC_MESSAGES\dopewars.mo
-../po/pl.gmo -> locale\pl\LC_MESSAGES\dopewars.mo
-../po/nn.gmo -> locale\nn\LC_MESSAGES\dopewars.mo
-../po/es.gmo -> locale\es\LC_MESSAGES\dopewars.mo
-../sounds/19.5degs/bye.wav -> sounds\19.5degs\bye.wav
-../sounds/19.5degs/colt.wav -> sounds\19.5degs\colt.wav
-../sounds/19.5degs/die.wav -> sounds\19.5degs\die.wav
-../sounds/19.5degs/gun.wav -> sounds\19.5degs\gun.wav
-../sounds/19.5degs/jet.wav -> sounds\19.5degs\jet.wav
-../sounds/19.5degs/losebitch.wav -> sounds\19.5degs\losebitch.wav
-../sounds/19.5degs/message.wav -> sounds\19.5degs\message.wav
-../sounds/19.5degs/murmur.wav -> sounds\19.5degs\murmur.wav
-../sounds/19.5degs/punch.wav -> sounds\19.5degs\punch.wav
-../sounds/19.5degs/run.wav -> sounds\19.5degs\run.wav
-../sounds/19.5degs/shotdown.wav -> sounds\19.5degs\shotdown.wav
-../sounds/19.5degs/train.wav -> sounds\19.5degs\train.wav
-
-[extrafiles]
-dopewars-log.txt
-dopewars.sco
-
-[keepfiles]
-dopewars-config.txt
-dopewars-log.txt
-dopewars.sco
-
-[startmenudir]
-dopewars-1.5.12
-
-[startmenu]
-dopewars.lnk
-dopewars.exe
-
-dopewars server.lnk
-dopewars.exe
--s
-text-mode dopewars.lnk
-dopewars.exe
--t
-dopewars AI player.lnk
-dopewars.exe
--c
-dopewars command line options.lnk
-dopewars.exe
--h
-dopewars help.lnk
-index.html
-
-dopewars configuration file.lnk
-dopewars-config.txt
-
-dopewars example config.lnk
-example-cfg.txt
-
-
-[desktop]
-dopewars.lnk
-dopewars.exe
-
-dopewars server.lnk
-dopewars.exe
--s |
| diff --git a/win32/guifunc.c b/win32/guifunc.c |
| t@@ -1,103 +0,0 @@
-/************************************************************************
- * guifunc.c GUI-specific shared functions for installer *
- * Copyright (C) 2001-2004 Ben Webb *
- * Email: benwebb@users.sf.net *
- * WWW: https://dopewars.sourceforge.io/ *
- * *
- * This program is free software; you can redistribute it and/or *
- * modify it under the terms of the GNU General Public License *
- * as published by the Free Software Foundation; either version 2 *
- * of the License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
- * MA 02111-1307, USA. *
- ************************************************************************/
-
-#include
-#include "guifunc.h"
-
-static LRESULT CALLBACK GtkSepProc(HWND hwnd, UINT msg, WPARAM wParam,
- LPARAM lParam)
-{
- PAINTSTRUCT ps;
- HPEN oldpen, dkpen, ltpen;
- RECT rect;
- HDC hDC;
-
- if (msg == WM_PAINT) {
- if (GetUpdateRect(hwnd, NULL, TRUE)) {
- BeginPaint(hwnd, &ps);
- GetClientRect(hwnd, &rect);
- hDC = ps.hdc;
- ltpen = CreatePen(PS_SOLID, 0, (COLORREF)GetSysColor(COLOR_3DHILIGHT));
- dkpen = CreatePen(PS_SOLID, 0, (COLORREF)GetSysColor(COLOR_3DSHADOW));
-
- if (rect.right > rect.bottom) {
- oldpen = SelectObject(hDC, dkpen);
- MoveToEx(hDC, rect.left, rect.top, NULL);
- LineTo(hDC, rect.right, rect.top);
-
- SelectObject(hDC, ltpen);
- MoveToEx(hDC, rect.left, rect.top + 1, NULL);
- LineTo(hDC, rect.right, rect.top + 1);
- } else {
- oldpen = SelectObject(hDC, dkpen);
- MoveToEx(hDC, rect.left, rect.top, NULL);
- LineTo(hDC, rect.left, rect.bottom);
-
- SelectObject(hDC, ltpen);
- MoveToEx(hDC, rect.left + 1, rect.top, NULL);
- LineTo(hDC, rect.left + 1, rect.bottom);
- }
-
- SelectObject(hDC, oldpen);
- DeleteObject(ltpen);
- DeleteObject(dkpen);
- EndPaint(hwnd, &ps);
- }
- return TRUE;
- } else
- return DefWindowProc(hwnd, msg, wParam, lParam);
-}
-
-void RegisterSepClass(HINSTANCE hInstance)
-{
- WNDCLASS wc;
-
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = GtkSepProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = NULL;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
- wc.lpszMenuName = NULL;
- wc.lpszClassName = "WC_GTKSEP";
- RegisterClass(&wc);
-}
-
-static BOOL CALLBACK enumFunc(HWND hWnd, LPARAM lParam)
-{
- HFONT GuiFont;
-
- GuiFont = (HFONT)lParam;
- SendMessage(hWnd, WM_SETFONT, (WPARAM)GuiFont, MAKELPARAM(FALSE, 0));
- return TRUE;
-}
-
-void SetGuiFont(HWND hWnd)
-{
- HFONT GuiFont;
-
- GuiFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
- if (GuiFont)
- EnumChildWindows(hWnd, enumFunc, (LPARAM)GuiFont);
-} |
| diff --git a/win32/guifunc.h b/win32/guifunc.h |
| t@@ -1,26 +0,0 @@
-/************************************************************************
- * guifunc.h GUI-specific shared functions for installer *
- * Copyright (C) 2001-2004 Ben Webb *
- * Email: benwebb@users.sf.net *
- * WWW: https://dopewars.sourceforge.io/ *
- * *
- * This program is free software; you can redistribute it and/or *
- * modify it under the terms of the GNU General Public License *
- * as published by the Free Software Foundation; either version 2 *
- * of the License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
- * MA 02111-1307, USA. *
- ************************************************************************/
-
-#include
-
-void RegisterSepClass(HINSTANCE hInstance);
-void SetGuiFont(HWND hWnd); |
| diff --git a/win32/makeinstall.c b/win32/makeinstall.c |
| t@@ -1,353 +0,0 @@
-/************************************************************************
- * makeinstall.c Program to create install data for setup.c *
- * Copyright (C) 2001-2004 Ben Webb *
- * Email: benwebb@users.sf.net *
- * WWW: https://dopewars.sourceforge.io/ *
- * *
- * This program is free software; you can redistribute it and/or *
- * modify it under the terms of the GNU General Public License *
- * as published by the Free Software Foundation; either version 2 *
- * of the License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
- * MA 02111-1307, USA. *
- ************************************************************************/
-
-#include
-#include
-#include
-#ifdef LIBBZ2
-# include "bzlib/bzlib.h"
-#else
-# include "zlib/zlib.h"
-#endif
-#include "util.h"
-
-char *read_line(HANDLE hin)
-{
- char *buf;
- int bufsize = 32, strind = 0;
- DWORD bytes_read;
-
- buf = bmalloc(bufsize);
-
- while (1) {
- if (!ReadFile(hin, &buf[strind], 1, &bytes_read, NULL)) {
- printf("Read error\n");
- break;
- }
- if (bytes_read == 0) {
- buf[strind] = '\0';
- break;
- } else if (buf[strind] == '\r')
- continue;
- else if (buf[strind] == '\n') {
- buf[strind++] = '\0';
- break;
- } else {
- strind++;
- if (strind >= bufsize) {
- bufsize *= 2;
- buf = brealloc(buf, bufsize);
- }
- }
- }
- if (strind == 0) {
- bfree(buf);
- return NULL;
- } else
- return buf;
-}
-
-InstData *ReadInstallData()
-{
- HANDLE fin;
- char *line, *line2, *line3, *line4;
- InstFiles *lastinst = NULL, *lastextra = NULL, *lastkeep = NULL;
- InstLink *lastmenu = NULL, *lastdesktop = NULL;
- InstData *idata;
- int i;
- enum {
- S_PRODUCT = 0, S_INSTDIR, S_INSTALL, S_EXTRA, S_KEEP, S_STARTMENUDIR,
- S_STARTMENU, S_DESKTOP, S_NTSERVICE, S_NONE
- } section = S_NONE;
- char *titles[S_NONE] = {
- "[product]", "[instdir]", "[install]", "[extrafiles]", "[keepfiles]",
- "[startmenudir]", "[startmenu]", "[desktop]", "[NT Service]"
- };
-
- idata = bmalloc(sizeof(InstData));
- idata->installdir = idata->startmenudir = NULL;
- idata->instfiles = idata->extrafiles = idata->keepfiles = NULL;
- idata->startmenu = idata->desktop = NULL;
- idata->service = NULL;
-
- fin = CreateFile("filelist", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
-
- if (fin != INVALID_HANDLE_VALUE) {
- while (1) {
- line = read_line(fin);
- if (!line)
- break;
- if (line[0] == '\0') {
- bfree(line);
- continue;
- }
-
- for (i = S_PRODUCT; i < S_NONE; i++) {
- if (strcmp(line, titles[i]) == 0) {
- section = i;
- break;
- }
- }
- if (i < S_NONE) {
- bfree(line);
- continue;
- }
-
- switch (section) {
- case S_NONE:
- printf("Bad line %s\n", line);
- exit(EXIT_FAILURE);
- case S_PRODUCT:
- printf("product ID = %s\n", line);
- idata->product = line;
- break;
- case S_INSTDIR:
- printf("install dir = %s\n", line);
- idata->installdir = line;
- break;
- case S_STARTMENUDIR:
- printf("start menu dir = %s\n", line);
- idata->startmenudir = line;
- break;
- case S_INSTALL:
- AddInstFiles(line, 0, &lastinst, &idata->instfiles);
- break;
- case S_EXTRA:
- AddInstFiles(line, 0, &lastextra, &idata->extrafiles);
- break;
- case S_KEEP:
- AddInstFiles(line, 0, &lastkeep, &idata->keepfiles);
- break;
- case S_STARTMENU:
- line2 = read_line(fin);
- line3 = read_line(fin);
- printf("start menu entry = %s/%s/%s\n", line, line2, line3);
- AddInstLink(line, line2, line3, &lastmenu, &idata->startmenu);
- break;
- case S_NTSERVICE:
- line2 = read_line(fin);
- line3 = read_line(fin);
- line4 = read_line(fin);
- printf("NT Service = %s/%s/%s/%s\n", line, line2, line3, line4);
- AddServiceDetails(line, line2, line3, line4, &idata->service);
- break;
- case S_DESKTOP:
- line2 = read_line(fin);
- line3 = read_line(fin);
- printf("desktop entry = %s/%s/%s\n", line, line2, line3);
- AddInstLink(line, line2, line3, &lastdesktop, &idata->desktop);
- break;
- }
- }
- CloseHandle(fin);
- }
-
- if (idata->installdir && idata->startmenudir && idata->product) {
- return idata;
- } else {
- printf("No directories specified\n");
- exit(EXIT_FAILURE);
- }
-}
-
-#define BUFFER_SIZE (32*1024)
-#define COMPRESSION 9
-
-void OpenNextFile(InstFiles *filelist, InstFiles **listpt, HANDLE *fin)
-{
- char *filename, *sep;
-
- if (*fin)
- CloseHandle(*fin);
- *fin = NULL;
-
- if (!*listpt)
- *listpt = filelist;
- else
- *listpt = (*listpt)->next;
-
- if (*listpt) {
- filename = (*listpt)->filename;
- sep = strstr(filename, " -> ");
- if (sep)
- *sep = '\0';
- *fin = CreateFile(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
- if (sep)
- strcpy(filename, sep + 4);
- if (*fin == INVALID_HANDLE_VALUE)
- printf("Cannot open file: %s\n", filename);
- }
-}
-
-int main()
-{
- HANDLE fout, fin;
- DWORD bytes_read, bytes_written;
- InstData *idata;
- InstFiles *filept;
- char *inbuf, *outbuf;
- int status, count;
- bstr *str;
-#ifdef LIBBZ2
- bz_stream z;
-#else
- z_stream z;
-#endif
-
- idata = ReadInstallData();
-
- fout = CreateFile("installfiles.z", GENERIC_WRITE, 0, NULL,
- CREATE_ALWAYS, 0, NULL);
-
- outbuf = bmalloc(BUFFER_SIZE);
- inbuf = bmalloc(BUFFER_SIZE);
-
-#ifdef LIBBZ2
- z.bzalloc = NULL;
- z.bzfree = NULL;
- z.opaque = NULL;
- BZ2_bzCompressInit(&z, COMPRESSION, 0, 30);
-#else
- z.zalloc = Z_NULL;
- z.zfree = Z_NULL;
- z.opaque = Z_NULL;
- deflateInit(&z, COMPRESSION);
-#endif
- z.avail_in = 0;
- z.next_out = outbuf;
- z.avail_out = BUFFER_SIZE;
-
- filept = NULL;
- fin = NULL;
- OpenNextFile(idata->instfiles, &filept, &fin);
- if (fin == INVALID_HANDLE_VALUE) {
- return 1;
- }
-
- while (fin != INVALID_HANDLE_VALUE) {
- if (z.avail_in == 0) {
- z.next_in = inbuf;
- bytes_read = 0;
- while (!bytes_read && fin) {
- if (!ReadFile(fin, inbuf, BUFFER_SIZE, &bytes_read, NULL)) {
- printf("Read error\n");
- break;
- }
- filept->filesize += bytes_read;
- if (!bytes_read)
- OpenNextFile(idata->instfiles, &filept, &fin);
- }
- z.avail_in = bytes_read;
- }
-#ifdef LIBBZ2
- status = BZ2_bzCompress(&z, z.avail_in == 0 ? BZ_FINISH : BZ_RUN);
-#else
- status = deflate(&z, z.avail_in == 0 ? Z_FINISH : Z_NO_FLUSH);
-#endif
- count = BUFFER_SIZE - z.avail_out;
- if (!WriteFile(fout, outbuf, count, &bytes_written, NULL)) {
- printf("Write error\n");
- }
- z.next_out = outbuf;
- z.avail_out = BUFFER_SIZE;
-
-#ifdef LIBBZ2
- if (status == BZ_STREAM_END) {
- break;
- } else if (status != BZ_RUN_OK && status != BZ_FINISH_OK) {
- printf("Unexpected bzlib status: %d\n", status);
- break;
- }
-#else
- if (status == Z_STREAM_END) {
- break;
- } else if (status != Z_OK) {
- printf("Unexpected libz status: %d\n", status);
- break;
- }
-#endif
- }
-
-#ifdef LIBBZ2
- printf("Written compressed data: raw %d, compressed %d\n",
- z.total_in_lo32, z.total_out_lo32);
- bytes_written = z.total_out_lo32;
- BZ2_bzCompressEnd(&z);
-#else
- printf("Written compressed data: raw %ld, compressed %ld\n",
- z.total_in, z.total_out);
- bytes_written = z.total_out;
- deflateEnd(&z);
-#endif
-
- CloseHandle(fout);
-
- fout = CreateFile("manifest", GENERIC_WRITE, 0, NULL,
- CREATE_ALWAYS, 0, NULL);
- if (fout == INVALID_HANDLE_VALUE)
- printf("Cannot create file list\n");
-
- str = bstr_new();
- bstr_setlength(str, 0);
- bstr_append_long(str, bytes_written);
- if (!WriteFile(fout, str->text, str->length + 1, &bytes_written, NULL)) {
- printf("Write error\n");
- }
-
- if (!WriteFile(fout, idata->product, strlen(idata->product) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- if (!WriteFile(fout, idata->installdir, strlen(idata->installdir) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- if (!WriteFile
- (fout, idata->startmenudir, strlen(idata->startmenudir) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
-
- WriteFileList(fout, idata->instfiles);
- WriteFileList(fout, idata->extrafiles);
-
- WriteLinkList(fout, idata->startmenu);
- WriteLinkList(fout, idata->desktop);
-
- WriteServiceDetails(fout, idata->service);
- WriteFileList(fout, idata->keepfiles);
-
- CloseHandle(fout);
- bfree(inbuf);
- bfree(outbuf);
-
- FreeInstData(idata, TRUE);
-
- return 0;
-}
-
-#ifdef LIBBZ2
-void bz_internal_error(int errcode)
-{
- printf("bzip error %d\n", errcode);
-}
-#endif |
| diff --git a/win32/setup.c b/win32/setup.c |
| t@@ -1,1242 +0,0 @@
-/************************************************************************
- * setup.c Simple Win32 installer for dopewars *
- * Copyright (C) 2001-2004 Ben Webb *
- * Email: benwebb@users.sf.net *
- * WWW: https://dopewars.sourceforge.io/ *
- * *
- * This program is free software; you can redistribute it and/or *
- * modify it under the terms of the GNU General Public License *
- * as published by the Free Software Foundation; either version 2 *
- * of the License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
- * MA 02111-1307, USA. *
- ************************************************************************/
-
-#include
-#include
-#include
-#include
-#include
-#ifdef LIBBZ2
-# include "bzlib/bzlib.h"
-#else
-# include "zlib/zlib.h"
-#endif
-#include
-
-#include "contid.h"
-#include "guifunc.h"
-#include "util.h"
-
-typedef enum {
- DL_INTRO = 0,
- DL_LICENCE, DL_SHORTCUTS, DL_INSTALLDIR, DL_DOINSTALL, DL_NUM
-} DialogType;
-
-InstData *idata;
-HWND mainDlg[DL_NUM];
-DialogType CurrentDialog;
-HINSTANCE hInst = NULL;
-char *oldversion = NULL;
-BOOL services_supported, have_admin_rights, install_all_users;
-
-DWORD WINAPI DoInstall(LPVOID lpParam);
-static void GetWinText(char **text, HWND hWnd);
-static void FillFolderList(void);
-
-/*
- * Does this OS version support NT services? If so, do we have the
- * necessary (administrator) rights to use them?
- */
-void ServiceCheck(BOOL *hasServices, BOOL *isAdmin)
-{
- SC_HANDLE scManager;
-
- scManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
- if (scManager) {
- *hasServices = *isAdmin = TRUE;
- CloseServiceHandle(scManager);
- } else if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) {
- *hasServices = *isAdmin = FALSE;
- } else {
- *hasServices = TRUE;
- *isAdmin = FALSE;
- }
-}
-
-BOOL InstallService(InstData *idata)
-{
- SC_HANDLE scManager, scService;
- HKEY key;
- bstr *str;
- static char keyprefix[] = "SYSTEM\\ControlSet001\\Services\\";
- NTService *service;
-
- service = idata->service;
- if (!service)
- return FALSE;
-
- scManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
-
- if (!scManager) {
- DisplayError("Cannot connect to service manager", TRUE, FALSE);
- return FALSE;
- }
-
- str = bstr_new();
- bstr_assign(str, idata->installdir);
- bstr_appendpath(str, service->exe);
-
- scService = CreateService(scManager, service->name, service->display,
- SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
- SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
- str->text, NULL, NULL, NULL, NULL, NULL);
- if (!scService) {
- DisplayError("Cannot create service", TRUE, FALSE);
- bstr_free(str, TRUE);
- return FALSE;
- }
-
- bstr_assign(str, keyprefix);
- bstr_append(str, service->name);
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, str->text,
- 0, KEY_WRITE, &key) == ERROR_SUCCESS) {
- RegSetValueEx(key, "Description", 0, REG_SZ, service->description,
- strlen(service->description));
- RegCloseKey(key);
- }
-
- CloseServiceHandle(scService);
- CloseServiceHandle(scManager);
- return TRUE;
-}
-
-/*
- * Checks that the install directory exists, and creates it if it does not.
- * Returns TRUE if the directory is OK.
- */
-BOOL CheckCreateDir(void)
-{
- char *instdir;
-
- GetWinText(&idata->installdir,
- GetDlgItem(mainDlg[DL_INSTALLDIR], ED_INSTDIR));
- instdir = idata->installdir;
- if (SetCurrentDirectory(instdir)) {
- return TRUE;
- } else {
- if (MessageBox(mainDlg[CurrentDialog],
- "The install directory does not exist.\n"
- "Create it?", "Install Directory", MB_YESNO) == IDYES) {
- if (CreateWholeDirectory(instdir)) {
- return TRUE;
- } else {
- DisplayError("Could not create directory", TRUE, FALSE);
- }
- }
- return FALSE;
- }
-}
-
-void ShowNewDialog(DialogType NewDialog)
-{
- RECT DeskRect, OurRect;
- int newX, newY;
- HWND hWnd;
- HANDLE hThread;
- DWORD threadID;
-
- if (NewDialog < 0 || NewDialog >= DL_NUM)
- return;
-
- if (NewDialog > CurrentDialog) {
- switch (CurrentDialog) {
- case DL_INSTALLDIR:
- if (!CheckCreateDir())
- return;
- break;
- case DL_INTRO:
- install_all_users = (services_supported
- && IsDlgButtonChecked(mainDlg[DL_INTRO],
- RB_ALLUSERS) == BST_CHECKED);
- FillFolderList();
- break;
- default:
- break;
- }
- }
-
- hWnd = mainDlg[NewDialog];
- if (GetWindowRect(hWnd, &OurRect) &&
- GetWindowRect(GetDesktopWindow(), &DeskRect)) {
- newX = (DeskRect.left + DeskRect.right + OurRect.left - OurRect.right) / 2;
- newY = (DeskRect.top + DeskRect.bottom + OurRect.top - OurRect.bottom) / 2;
- SetWindowPos(hWnd, HWND_TOP, newX, newY, 0, 0, SWP_NOSIZE);
- }
- ShowWindow(hWnd, SW_SHOW);
-
- if (CurrentDialog != DL_NUM)
- ShowWindow(mainDlg[CurrentDialog], SW_HIDE);
- CurrentDialog = NewDialog;
-
- if (NewDialog == DL_DOINSTALL) {
- hThread = CreateThread(NULL, 0, DoInstall, NULL, 0, &threadID);
- }
-}
-
-int CALLBACK BrowseCallback(HWND hwnd, UINT msg, LPARAM lParam,
- LPARAM lpData)
-{
- switch (msg) {
- case BFFM_INITIALIZED:
- SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)idata->installdir);
- break;
- }
- return 0;
-}
-
-void SelectInstDir(HWND parent)
-{
- BROWSEINFO bi = { 0 };
- TCHAR path[MAX_PATH];
- LPITEMIDLIST pidl;
- IMalloc *imalloc = 0;
-
- if (SUCCEEDED(SHGetMalloc(&imalloc))) {
- bi.lpszTitle = "Pick a directory";
- bi.pszDisplayName = path;
- bi.ulFlags = BIF_STATUSTEXT | BIF_RETURNONLYFSDIRS;
- bi.lpfn = BrowseCallback;
- pidl = SHBrowseForFolder(&bi);
- if (pidl) {
- if (SHGetPathFromIDList(pidl, path)) {
- bfree(idata->installdir);
- idata->installdir = bstrdup(path);
- SendDlgItemMessage(mainDlg[DL_INSTALLDIR], ED_INSTDIR, WM_SETTEXT,
- 0, (LPARAM)idata->installdir);
- }
- imalloc->lpVtbl->Free(imalloc, pidl);
- }
- imalloc->lpVtbl->Release(imalloc);
- }
-}
-
-void ConditionalExit(HWND hWnd)
-{
- if (MessageBox(hWnd,
- "This will exit without installing any new software on "
- "your machine.\nAre you sure you want to quit?\n\n(You can "
- "continue the installation at a\nlater date simply by "
- "running this program again.)", "Exit Install",
- MB_YESNO | MB_ICONQUESTION) == IDYES) {
- PostQuitMessage(0);
- }
-}
-
-void UpdateStartMenuFolder(void)
-{
- char *buf;
- HWND folderlist;
- LRESULT lres;
- int selind;
-
- folderlist = GetDlgItem(mainDlg[DL_SHORTCUTS], LB_FOLDLIST);
- if (!folderlist)
- return;
-
- lres = SendMessage(folderlist, LB_GETCURSEL, 0, 0);
- if (lres == LB_ERR)
- return;
-
- selind = (int)lres;
- lres = SendMessage(folderlist, LB_GETTEXTLEN, (WPARAM)selind, 0);
- if (lres == LB_ERR)
- return;
-
- buf = bmalloc(lres + 1);
- lres = SendMessage(folderlist, LB_GETTEXT, (WPARAM)selind, (LPARAM)buf);
- if (lres != LB_ERR) {
- SendDlgItemMessage(mainDlg[DL_SHORTCUTS], ED_FOLDER, WM_SETTEXT,
- 0, (LPARAM)buf);
- }
- bfree(buf);
-}
-
-BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam,
- LPARAM lParam)
-{
- switch (msg) {
- case WM_INITDIALOG:
- return TRUE;
- case WM_COMMAND:
- if (HIWORD(wParam) == BN_CLICKED && lParam) {
- switch (LOWORD(wParam)) {
- case BT_CANCEL:
- ConditionalExit(hWnd);
- break;
- case BT_NEXT:
- ShowNewDialog(CurrentDialog + 1);
- break;
- case BT_BACK:
- ShowNewDialog(CurrentDialog - 1);
- break;
- case BT_FINISH:
- PostQuitMessage(0);
- break;
- case BT_BROWSE:
- SelectInstDir(hWnd);
- break;
- }
- } else if (HIWORD(wParam) == LBN_SELCHANGE && lParam &&
- LOWORD(wParam) == LB_FOLDLIST) {
- UpdateStartMenuFolder();
- }
- break;
- case WM_CLOSE:
- ConditionalExit(hWnd);
- return TRUE;
- }
- return FALSE;
-}
-
-LPVOID GetResource(LPCTSTR resname, LPCTSTR restype)
-{
- HRSRC hrsrc;
- HGLOBAL hglobal;
- LPVOID respt;
-
- hrsrc = FindResource(NULL, resname, restype);
- if (!hrsrc)
- DisplayError("Could not find resource", TRUE, TRUE);
-
- hglobal = LoadResource(NULL, hrsrc);
- if (!hglobal)
- DisplayError("Could not load resource", TRUE, TRUE);
-
- respt = LockResource(hglobal);
- if (!respt)
- DisplayError("Could not lock resource", TRUE, TRUE);
-
- return respt;
-}
-
-InstData *ReadInstData()
-{
- InstFiles *lastinst = NULL, *lastextra = NULL, *lastkeep = NULL;
- InstLink *lastmenu = NULL, *lastdesktop = NULL;
- char *instdata, *pt, *filename, *line2, *line3, *line4;
- bstr *idir;
- DWORD filesize;
- InstData *idata;
-
- instdata = GetResource(MAKEINTRESOURCE(0), "INSTLIST");
- if (!instdata)
- return NULL;
-
- pt = instdata;
-
- idata = bmalloc(sizeof(InstData));
- idata->flags = 0;
- idata->service = NULL;
- idata->totalsize = atol(pt);
- pt += strlen(pt) + 1;
-
- idata->product = bstrdup(pt);
- pt += strlen(pt) + 1;
-
- idir = bstr_new();
- bstr_assign_progfilesdir(idir);
- bstr_appendpath(idir, pt);
- idata->installdir = idir->text;
- bstr_free(idir, FALSE);
- pt += strlen(pt) + 1;
-
- idata->startmenudir = bstrdup(pt);
- pt += strlen(pt) + 1;
-
- while (1) {
- filename = pt;
- pt += strlen(pt) + 1;
- if (filename[0]) {
- filesize = atol(pt);
- pt += strlen(pt) + 1;
- AddInstFiles(filename, filesize, &lastinst, &idata->instfiles);
- } else
- break;
- }
- while (1) {
- filename = pt;
- pt += strlen(pt) + 1;
- if (filename[0]) {
- filesize = atol(pt);
- pt += strlen(pt) + 1;
- AddInstFiles(filename, filesize, &lastextra, &idata->extrafiles);
- } else
- break;
- }
- while (1) {
- filename = pt;
- pt += strlen(pt) + 1;
- if (filename[0]) {
- line2 = pt;
- pt += strlen(pt) + 1;
- line3 = pt;
- pt += strlen(pt) + 1;
- AddInstLink(filename, line2, line3, &lastmenu, &idata->startmenu);
- } else
- break;
- }
- while (1) {
- filename = pt;
- pt += strlen(pt) + 1;
- if (filename[0]) {
- line2 = pt;
- pt += strlen(pt) + 1;
- line3 = pt;
- pt += strlen(pt) + 1;
- AddInstLink(filename, line2, line3, &lastdesktop, &idata->desktop);
- } else
- break;
- }
- filename = pt;
- pt += strlen(pt) + 1;
- if (filename[0]) {
- line2 = pt;
- pt += strlen(pt) + 1;
- line3 = pt;
- pt += strlen(pt) + 1;
- line4 = pt;
- pt += strlen(pt) + 1;
- AddServiceDetails(filename, line2, line3, line4, &idata->service);
- }
- while (1) {
- filename = pt;
- pt += strlen(pt) + 1;
- if (filename[0]) {
- filesize = atol(pt);
- pt += strlen(pt) + 1;
- AddInstFiles(filename, filesize, &lastkeep, &idata->keepfiles);
- } else
- break;
- }
-
- return idata;
-}
-
-#define BUFFER_SIZE (32*1024)
-
-char *GetFirstFile(InstFiles *filelist, DWORD totalsize)
-{
- DWORD bufsiz;
- char *inbuf, *outbuf;
- int status;
-#ifdef LIBBZ2
- bz_stream z;
-#else
- z_stream z;
-#endif
-
- if (!filelist)
- return NULL;
-
- inbuf = GetResource(MAKEINTRESOURCE(1), "INSTFILE");
- if (!inbuf)
- return NULL;
-
- bufsiz = filelist->filesize;
- outbuf = bmalloc(bufsiz + 1);
-
-#ifdef LIBBZ2
- z.bzalloc = NULL;
- z.bzfree = NULL;
- z.opaque = NULL;
- BZ2_bzDecompressInit(&z, 0, 0);
-#else
- z.zalloc = Z_NULL;
- z.zfree = Z_NULL;
- z.opaque = Z_NULL;
- inflateInit(&z);
-#endif
-
- z.next_in = inbuf;
- z.avail_in = totalsize;
- z.next_out = outbuf;
- z.avail_out = bufsiz;
-
- while (1) {
-#ifdef LIBBZ2
- status = BZ2_bzDecompress(&z);
- if ((status != BZ_OK && status != BZ_STREAM_END) || z.avail_out == 0) {
- break;
- }
-#else
- status = inflate(&z, Z_SYNC_FLUSH);
- if ((status != Z_OK && status != Z_STREAM_END) || z.avail_out == 0) {
- break;
- }
-#endif
- }
-
-#ifdef LIBBZ2
- BZ2_bzDecompressEnd(&z);
-#else
- inflateEnd(&z);
-#endif
-
- outbuf[bufsiz] = '\0';
- return outbuf;
-}
-
-BOOL OpenNextOutput(HANDLE *fout, InstFiles *filelist,
- InstFiles *keepfiles, InstFiles **listpt,
- DWORD *fileleft, HANDLE logf, BOOL *skipfile)
-{
- char *filename, *sep;
- bstr *str;
- InstFiles *keeppt;
- DWORD bytes_written;
-
- *skipfile = FALSE;
-
- if (*fout)
- CloseHandle(*fout);
- *fout = INVALID_HANDLE_VALUE;
-
- str = bstr_new();
-
- if (*listpt) {
- if (!WriteFile
- (logf, (*listpt)->filename, strlen((*listpt)->filename) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
-
- bstr_setlength(str, 0);
- bstr_append_long(str, (*listpt)->filesize);
- if (!WriteFile(logf, str->text, str->length + 1, &bytes_written, NULL)) {
- printf("Write error\n");
- }
- *listpt = (*listpt)->next;
- } else
- *listpt = filelist;
-
- if (*listpt) {
- filename = (*listpt)->filename;
- sep = strrchr(filename, '\\');
- if (sep) {
- *sep = '\0';
- CreateWholeDirectory(filename);
- *sep = '\\';
- }
- keeppt = keepfiles;
- while (keeppt && strcmp(keeppt->filename, filename) != 0)
- keeppt = keeppt->next;
-
- /* If the file is already installed (filesize!=0), then skip it */
- if (keeppt && keeppt->filesize != 0) {
- *fout = INVALID_HANDLE_VALUE + 1; /* Make sure the handle is valid */
- *skipfile = TRUE;
- } else {
- *fout = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
- 0, NULL);
- bstr_assign(str, "Installing file: ");
- bstr_append(str, filename);
- bstr_append(str, " (size ");
- bstr_append_long(str, (*listpt)->filesize);
- bstr_append(str, ")");
- SendDlgItemMessage(mainDlg[DL_DOINSTALL], ST_FILELIST,
- WM_SETTEXT, 0, (LPARAM)str->text);
- if (*fout == INVALID_HANDLE_VALUE) {
- bstr_assign(str, "Cannot create file ");
- bstr_append(str, filename);
- DisplayError(str->text, TRUE, FALSE);
- }
- }
- *fileleft = (*listpt)->filesize;
- }
-
- bstr_free(str, TRUE);
-
- return (*fout != INVALID_HANDLE_VALUE);
-}
-
-HRESULT CreateLink(LPCSTR origPath, LPSTR linkArgs, LPSTR workDir,
- LPSTR linkPath, LPSTR linkDesc)
-{
- HRESULT hres;
- IShellLink *psl;
- IPersistFile *ppf;
- WORD wsz[MAX_PATH];
-
- hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
- &IID_IShellLink, (void **)&psl);
- if (SUCCEEDED(hres)) {
- psl->lpVtbl->SetPath(psl, origPath);
- if (workDir)
- psl->lpVtbl->SetWorkingDirectory(psl, workDir);
- if (linkDesc)
- psl->lpVtbl->SetDescription(psl, linkDesc);
- if (linkArgs)
- psl->lpVtbl->SetArguments(psl, linkArgs);
- hres = psl->lpVtbl->QueryInterface(psl, &IID_IPersistFile, (void **)&ppf);
- if (SUCCEEDED(hres)) {
- MultiByteToWideChar(CP_ACP, 0, linkPath, -1, wsz, MAX_PATH);
- hres = ppf->lpVtbl->Save(ppf, wsz, TRUE);
- ppf->lpVtbl->Release(ppf);
- } else {
- DisplayError("Cannot write shortcut", FALSE, FALSE);
- }
- psl->lpVtbl->Release(psl);
- } else {
- DisplayError("Cannot create shortcut", FALSE, FALSE);
- }
- return hres;
-}
-
-void GetWinText(char **text, HWND hWnd)
-{
- int textlen;
-
- bfree(*text);
- *text = NULL;
- if (!hWnd)
- return;
-
- textlen = GetWindowTextLength(hWnd) + 1;
- if (!textlen)
- return;
-
- *text = bmalloc(textlen);
- if (!GetWindowText(hWnd, *text, textlen)) {
- bfree(*text);
- *text = NULL;
- }
-}
-
-void CreateLinks(char *linkdir, InstLink *linkpt)
-{
- bstr *linkpath, *origfile;
-
- linkpath = bstr_new();
- origfile = bstr_new();
-
- for (; linkpt; linkpt = linkpt->next) {
- bstr_assign(linkpath, linkdir);
- bstr_appendpath(linkpath, linkpt->linkfile);
-
- bstr_assign(origfile, idata->installdir);
- bstr_appendpath(origfile, linkpt->origfile);
-
- CreateLink(origfile->text, linkpt->args, idata->installdir,
- linkpath->text, NULL);
- }
-}
-
-void SetupShortcuts(HANDLE fout)
-{
- char *startmenu, *desktop;
- BOOL dodesktop;
-
- startmenu = GetStartMenuDir(install_all_users, idata);
- desktop = GetDesktopDir();
-
- dodesktop =
- (IsDlgButtonChecked(mainDlg[DL_SHORTCUTS], CB_DESKTOP) ==
- BST_CHECKED);
-
- if (startmenu) {
- if (CreateDirectory(startmenu, NULL)) {
- CreateLinks(startmenu, idata->startmenu);
- WriteLinkList(fout, idata->startmenu);
- } else {
- DisplayError("Could not create Start Menu directory", TRUE, FALSE);
- WriteLinkList(fout, NULL);
- }
- } else {
- WriteLinkList(fout, NULL);
- }
-
- if (dodesktop && desktop) {
- CreateLinks(desktop, idata->desktop);
- WriteLinkList(fout, idata->desktop);
- } else {
- WriteLinkList(fout, NULL);
- }
-
- bfree(startmenu);
- bfree(desktop);
-}
-
-void SetupUninstall()
-{
- HKEY key;
- DWORD disp;
- bstr *str, *uninstexe, *link;
- BOOL haveuninstall = FALSE;
- char *startmenu;
- InstFiles *listpt;
-
- for (listpt = idata->instfiles; listpt; listpt = listpt->next) {
- if (strcmp(listpt->filename, "uninstall.exe") == 0) {
- haveuninstall = TRUE;
- break;
- }
- }
-
- if (!haveuninstall)
- return;
-
- str = bstr_new();
- uninstexe = bstr_new();
- link = bstr_new();
-
- bstr_assign(str, UninstallKey);
- bstr_appendpath(str, idata->product);
-
- if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, str->text, 0, NULL, 0,
- KEY_WRITE, NULL, &key, &disp) == ERROR_SUCCESS) {
- RegSetValueEx(key, "DisplayName", 0, REG_SZ, idata->product,
- strlen(idata->product));
- bstr_assign_windir(str);
- bstr_appendpath(str, UninstallEXE);
- bstr_append_c(str, ' ');
- bstr_append(str, idata->product);
- RegSetValueEx(key, "UninstallString", 0, REG_SZ, str->text,
- str->length);
- bstr_assign(str, idata->installdir);
- RegSetValueEx(key, "InstallDirectory", 0, REG_SZ, str->text,
- str->length);
- RegCloseKey(key);
- } else {
- DisplayError("Cannot create registry key for uninstall", TRUE, FALSE);
- }
-
- bstr_assign_windir(str);
- bstr_appendpath(str, "bw-uninstall.exe");
- DeleteFile(str->text);
-
- bstr_assign(uninstexe, idata->installdir);
- bstr_appendpath(uninstexe, "uninstall.exe");
-
- if (!MoveFile(uninstexe->text, str->text)) {
- DisplayError("Unable to create uninstall program", TRUE, FALSE);
- }
- DeleteFile(uninstexe->text);
-
- startmenu = GetStartMenuDir(install_all_users, idata);
- bstr_assign(link, startmenu);
- bstr_appendpath(link, "Uninstall ");
- bstr_append(link, idata->product);
- bstr_append(link, ".LNK");
-
- CreateLink(str->text, idata->product, NULL, link->text, NULL);
-
- bstr_free(link, TRUE);
- bstr_free(uninstexe, TRUE);
- bstr_free(str, TRUE);
- bfree(startmenu);
-}
-
-void StartRemoveOldVersion(char *oldversion, InstData *idata,
- InstData **oldidata, HWND hwnd)
-{
- InstData *old;
- bstr *str;
- char *oldidir, *startmenu, *desktop;
- HANDLE fin;
-
- *oldidata = NULL;
-
- if (!oldversion)
- return;
-
- oldidir = GetInstallDir(oldversion);
-
- if (!SetCurrentDirectory(oldidir)) {
- str = bstr_new();
- bstr_assign(str, "Could not access old version's install directory ");
- bstr_append(str, oldidir);
- DisplayError(str->text, TRUE, TRUE);
- }
-
- fin = CreateFile("install.log", GENERIC_READ, 0, NULL, OPEN_EXISTING,
- 0, NULL);
-
- if (fin) {
- old = ReadOldInstData(fin, oldversion, oldidir);
- CloseHandle(fin);
- DeleteFile("install.log");
-
- RemoveService(old->service);
- DeleteFileList(old->instfiles, hwnd, idata->keepfiles);
- DeleteFileList(old->extrafiles, hwnd, idata->keepfiles);
-
- startmenu = GetStartMenuDir(old->flags & IF_ALLUSERS, old);
- desktop = GetDesktopDir();
- DeleteLinkList(startmenu, old->startmenu, hwnd);
- DeleteLinkList(desktop, old->desktop, hwnd);
-
- RemoveUninstall(startmenu, oldversion, FALSE);
-
- bfree(startmenu);
- bfree(desktop);
- *oldidata = old;
- }
-}
-
-void FinishRemoveOldVersion(char *oldversion, InstData *idata,
- InstData *oldidata)
-{
- InstFiles *keeppt;
- bstr *str;
- char *desktop, *startmenu;
-
- if (!oldidata)
- return;
-
- desktop = GetDesktopDir();
-
- str = bstr_new();
- /* If we're installing into a different directory, move config. files
- * etc. from the old directory to the new one */
- if (strcmp(oldidata->installdir, idata->installdir) != 0 &&
- SetCurrentDirectory(oldidata->installdir)) {
- for (keeppt = idata->keepfiles; keeppt; keeppt = keeppt->next) {
- if (keeppt->filesize != 0) {
- bstr_assign(str, idata->installdir);
- bstr_appendpath(str, keeppt->filename);
- if (CopyFile(keeppt->filename, str->text, FALSE)) {
- DeleteFile(keeppt->filename);
- }
- }
- }
- SetCurrentDirectory(desktop); /* Make sure we're not in the
- * install dir */
- if (!RemoveWholeDirectory(oldidata->installdir)) {
- bstr_assign(str, "Could not remove old install directory:\n");
- bstr_append(str, oldidata->installdir);
- bstr_append(str, "\nYou may wish to manually remove it later.");
- DisplayError(str->text, FALSE, FALSE);
- }
- }
-
- if (strcmp(idata->startmenudir, oldidata->startmenudir) != 0) {
- SetCurrentDirectory(desktop); /* Make sure we're not in the menu
- * dir */
- startmenu = GetStartMenuDir(oldidata->flags & IF_ALLUSERS, oldidata);
- if (!RemoveWholeDirectory(startmenu)) {
- bstr_assign(str, "Could not remove old Start Menu directory:\n");
- bstr_append(str, startmenu);
- bstr_append(str, "\nYou may wish to manually remove it later.");
- DisplayError(str->text, FALSE, FALSE);
- }
- bfree(startmenu);
- }
-
- /* Remove the old registry key */
- bstr_assign(str, UninstallKey);
- bstr_appendpath(str, oldversion);
- RegDeleteKey(HKEY_LOCAL_MACHINE, str->text);
-
- bfree(desktop);
- bstr_free(str, TRUE);
-
- FreeInstData(oldidata, TRUE);
- oldversion = NULL; /* This is freed by FreeInstData */
-}
-
-DWORD WINAPI DoInstall(LPVOID lpParam)
-{
- HANDLE fout, logf, fin;
- DWORD bytes_written, fileleft;
- BOOL skipfile, service_installed;
- char *inbuf, *outbuf;
- int status, count;
-#ifdef LIBBZ2
- bz_stream z;
-#else
- z_stream z;
-#endif
- InstFiles *listpt;
- InstData *oldidata;
-
- /* Steal the filesize attribute to mark that these files are not already
- * installed */
- for (listpt = idata->keepfiles; listpt; listpt = listpt->next) {
- listpt->filesize = 0;
- }
-
- StartRemoveOldVersion(oldversion, idata, &oldidata,
- GetDlgItem(mainDlg[DL_DOINSTALL], ST_FILELIST));
-
- inbuf = GetResource(MAKEINTRESOURCE(1), "INSTFILE");
- if (!inbuf)
- return 0;
-
- GetWinText(&idata->startmenudir,
- GetDlgItem(mainDlg[DL_SHORTCUTS], ED_FOLDER));
-
- if (!SetCurrentDirectory(idata->installdir)) {
- DisplayError("Cannot access install directory", TRUE, TRUE);
- }
-
- /* Check for already-installed files */
- for (listpt = idata->keepfiles; listpt; listpt = listpt->next) {
- fin = CreateFile(listpt->filename, GENERIC_READ, 0, NULL,
- OPEN_EXISTING, 0, NULL);
- if (fin != INVALID_HANDLE_VALUE) {
- CloseHandle(fin);
- listpt->filesize = 1;
- }
- }
-
- logf = CreateFile("install.log", GENERIC_WRITE, 0, NULL,
- CREATE_ALWAYS, 0, NULL);
-
- if (!WriteFile(logf, idata->startmenudir,
- strlen(idata->startmenudir) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
-
- fout = INVALID_HANDLE_VALUE;
- listpt = NULL;
- OpenNextOutput(&fout, idata->instfiles, idata->keepfiles,
- &listpt, &fileleft, logf, &skipfile);
-
- outbuf = bmalloc(BUFFER_SIZE);
-
-#ifdef LIBBZ2
- z.bzalloc = NULL;
- z.bzfree = NULL;
- z.opaque = NULL;
- BZ2_bzDecompressInit(&z, 0, 0);
-#else
- z.zalloc = Z_NULL;
- z.zfree = Z_NULL;
- z.opaque = Z_NULL;
- inflateInit(&z);
-#endif
-
- z.avail_in = idata->totalsize;
- z.next_in = inbuf;
- z.next_out = outbuf;
- z.avail_out = BUFFER_SIZE;
-
- while (1) {
-#ifdef LIBBZ2
- status = BZ2_bzDecompress(&z);
- if (status == BZ_OK || status == BZ_STREAM_END) {
-#else
- status = inflate(&z, Z_SYNC_FLUSH);
- if (status == Z_OK || status == Z_STREAM_END) {
-#endif
- count = BUFFER_SIZE - z.avail_out;
- z.next_out = outbuf;
- while (count >= fileleft) {
- if (fileleft && !skipfile
- && !WriteFile(fout, z.next_out, fileleft, &bytes_written, NULL)) {
- printf("Write error\n");
- }
- count -= fileleft;
- z.next_out += fileleft;
- if (!OpenNextOutput(&fout, idata->instfiles, idata->keepfiles,
- &listpt, &fileleft, logf, &skipfile))
- break;
- }
- if (fout == INVALID_HANDLE_VALUE)
- break;
- if (count && !skipfile
- && !WriteFile(fout, z.next_out, count, &bytes_written, NULL)) {
- printf("Write error\n");
- }
- fileleft -= count;
- z.next_out = outbuf;
- z.avail_out = BUFFER_SIZE;
- }
-#ifdef LIBBZ2
- if (status != BZ_OK) {
- break;
- }
-#else
- if (status != Z_OK) {
- break;
- }
-#endif
- }
-
-#ifdef LIBBZ2
- BZ2_bzDecompressEnd(&z);
-#else
- inflateEnd(&z);
-#endif
- if (!skipfile)
- CloseHandle(fout);
-
- outbuf[0] = '\0';
- if (!WriteFile(logf, outbuf, 1, &bytes_written, NULL)) {
- printf("Write error\n");
- }
- bfree(outbuf);
-
- WriteFileList(logf, idata->extrafiles);
-
- FinishRemoveOldVersion(oldversion, idata, oldidata);
-
- if (services_supported) {
- service_installed = InstallService(idata);
- } else {
- service_installed = FALSE;
- }
-
- if (service_installed) {
- MessageBox(mainDlg[CurrentDialog],
- "The dopewars server has been installed as an NT Service, "
- "and configured\nfor manual startup. To start or stop this "
- "service, or to configure it to run\nautomatically when "
- "you turn on your computer, see the \"Services\" application\n"
- "from Control Panel. You can also run an interactive server "
- "by using\nthe \"dopewars server\" shortcut from the desktop "
- "and/or Start Menu.", "Service Installed",
- MB_ICONINFORMATION | MB_OK);
- }
-
- CoInitialize(NULL);
- SetupShortcuts(logf);
- SetupUninstall();
- CoUninitialize();
-
- WriteServiceDetails(logf, service_installed ? idata->service : NULL);
-
- if (install_all_users) {
- idata->flags |= IF_ALLUSERS;
- }
- WriteInstFlags(logf, idata->flags);
-
- CloseHandle(logf);
-
- SetFileAttributes("install.log", FILE_ATTRIBUTE_HIDDEN);
-
- ShowWindow(GetDlgItem(mainDlg[DL_DOINSTALL], ST_COMPLETE), SW_SHOW);
- ShowWindow(GetDlgItem(mainDlg[DL_DOINSTALL], ST_EXIT), SW_SHOW);
- EnableWindow(GetDlgItem(mainDlg[DL_DOINSTALL], BT_FINISH), TRUE);
- return 0;
-}
-
-void FillFolderList(void)
-{
- HANDLE findfile;
- WIN32_FIND_DATA finddata;
- bstr *str;
- char *startdir;
- HWND folderlist;
-
- folderlist = GetDlgItem(mainDlg[DL_SHORTCUTS], LB_FOLDLIST);
- if (!folderlist)
- return;
-
- SendMessage(folderlist, LB_RESETCONTENT, 0, 0);
-
- str = bstr_new();
-
- startdir = GetStartMenuTopDir(install_all_users);
- bstr_assign(str, startdir);
- bfree(startdir);
- bstr_appendpath(str, "Programs\\*");
-
- findfile = FindFirstFile(str->text, &finddata);
- if (findfile != INVALID_HANDLE_VALUE) {
- while (1) {
- if (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
- && strcmp(finddata.cFileName, ".") != 0
- && strcmp(finddata.cFileName, "..") != 0) {
- SendMessage(folderlist, LB_ADDSTRING, 0,
- (LPARAM)finddata.cFileName);
- }
- if (!FindNextFile(findfile, &finddata))
- break;
- }
- FindClose(findfile);
- }
- bstr_free(str, TRUE);
-}
-
-BOOL CheckAdminRights(void)
-{
- return (!services_supported || have_admin_rights
- || MessageBox(NULL,
- "To successfully install all components of this "
- "program Administrator\nrights are required, and you "
- "do not appear to have them. Do you want\nto attempt "
- "to continue the installation anyway?",
- "Administrator rights not found",
- MB_YESNO | MB_DEFBUTTON2) == IDYES);
-}
-
-BOOL CheckExistingInstall(InstData *idata)
-{
- bstr *str;
- char *sep, *prodname, *prodversion;
- char *subkey;
- int sublen;
- DWORD sublencp;
- HKEY key;
- DWORD ind;
- FILETIME ftime;
- BOOL retval = TRUE;
-
- str = bstr_new();
- bstr_assign(str, UninstallKey);
- bstr_appendpath(str, idata->product);
-
- /* Split product into name and version */
- sep = strrchr(idata->product, '-');
-
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, str->text, 0, KEY_READ, &key) ==
- ERROR_SUCCESS) {
- RegCloseKey(key);
- if (MessageBox(NULL, "This program appears to already be installed.\n"
- "Are you sure you want to go ahead and install it anyway?",
- idata->product, MB_YESNO) == IDNO)
- retval = FALSE;
- } else if (sep) {
- *sep = '\0';
- prodversion = sep + 1;
- prodname = bstrdup(idata->product);
- *sep = '-';
- sublencp = sublen = strlen(idata->product) + 30;
- subkey = bmalloc(sublen);
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, UninstallKey, 0,
- KEY_READ, &key) == ERROR_SUCCESS) {
- ind = 0;
- while (RegEnumKeyEx(key, ind++, subkey, &sublencp,
- NULL, NULL, NULL, &ftime) == ERROR_SUCCESS) {
- sublencp = sublen;
- sep = strrchr(subkey, '-');
- if (sep) {
- *sep = '\0';
- if (strcmp(subkey, prodname) == 0) {
- bstr_assign(str, "You are trying to install ");
- bstr_append(str, idata->product);
- bstr_append(str, ".\nHowever, version ");
- bstr_append(str, sep + 1);
- bstr_append(str, " appears to already be installed.\n"
- "Do you want to replace the existing version with "
- "this one?\n(If you answer \"No\", and continue, "
- "both versions will be installed.)");
- if (MessageBox(NULL, str->text, "Existing version",
- MB_YESNO) == IDYES) {
- *sep = '-';
- oldversion = bstrdup(subkey);
- }
- break;
- }
- }
- }
- RegCloseKey(key);
- }
- bfree(prodname);
- bfree(subkey);
- }
- bstr_free(str, TRUE);
- return retval;
-}
-
-BOOL SetDefaultInstall(void)
-{
- HWND dlg;
-
- dlg = mainDlg[DL_INTRO];
-
- if (services_supported) {
- CheckRadioButton(dlg, RB_ALLUSERS, RB_ONEUSER,
- have_admin_rights ? RB_ALLUSERS : RB_ONEUSER);
- } else {
- ShowWindow(GetDlgItem(dlg, RB_ALLUSERS), SW_HIDE);
- ShowWindow(GetDlgItem(dlg, RB_ONEUSER), SW_HIDE);
- }
-
- return have_admin_rights;
-}
-
-int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
- LPSTR lpszCmdParam, int nCmdShow)
-{
- MSG msg;
- int i;
- BOOL Handled;
- char *licence;
-
- InitCommonControls();
-
- hInst = hInstance;
-
- if (!hPrevInstance)
- RegisterSepClass(hInstance);
-
- for (i = 0; i < DL_NUM; i++) {
- mainDlg[i] =
- CreateDialog(hInst, MAKEINTRESOURCE(i + 1), NULL, MainDlgProc);
- }
-
- ServiceCheck(&services_supported, &have_admin_rights);
-
- install_all_users = SetDefaultInstall();
-
- CheckDlgButton(mainDlg[DL_SHORTCUTS], CB_DESKTOP, BST_CHECKED);
- EnableWindow(GetDlgItem(mainDlg[DL_DOINSTALL], BT_FINISH), FALSE);
-
- ShowWindow(GetDlgItem(mainDlg[DL_DOINSTALL], ST_COMPLETE), SW_HIDE);
- ShowWindow(GetDlgItem(mainDlg[DL_DOINSTALL], ST_EXIT), SW_HIDE);
-
- idata = ReadInstData();
-
- SendDlgItemMessage(mainDlg[DL_SHORTCUTS], ED_FOLDER, WM_SETTEXT,
- 0, (LPARAM)idata->startmenudir);
- SendDlgItemMessage(mainDlg[DL_INSTALLDIR], ED_INSTDIR, WM_SETTEXT,
- 0, (LPARAM)idata->installdir);
-
- licence = GetFirstFile(idata->instfiles, idata->totalsize);
-
- if (licence) {
- SendDlgItemMessage(mainDlg[DL_LICENCE], ED_LICENCE, WM_SETTEXT,
- 0, (LPARAM)licence);
- bfree(licence);
- }
-
- for (i = 0; i < DL_NUM; i++)
- SetGuiFont(mainDlg[i]);
-
- if (CheckAdminRights() && CheckExistingInstall(idata)) {
- CurrentDialog = DL_NUM;
- ShowNewDialog(DL_INTRO);
-
- while (GetMessage(&msg, NULL, 0, 0)) {
- Handled = FALSE;
- for (i = 0; i < DL_NUM && !Handled; i++) {
- Handled = IsDialogMessage(mainDlg[i], &msg);
- }
- if (!Handled) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- }
- FreeInstData(idata, FALSE);
-
- return 0;
-}
-
-#ifdef LIBBZ2
-void bz_internal_error(int errcode)
-{
-}
-#endif |
| diff --git a/win32/setup.ico b/win32/setup.ico |
| Binary files differ. |
| diff --git a/win32/setup.manifest b/win32/setup.manifest |
| t@@ -1,21 +0,0 @@
-
-
-
-dopewars drug dealing game setup program
-
-
-
-
-
- |
| diff --git a/win32/setup.rc b/win32/setup.rc |
| t@@ -1,8 +0,0 @@
-#include
-
-1 24 "setup.manifest"
-
-0 INSTLIST "manifest"
-1 INSTFILE "installfiles.z"
-
-#include "dialogs.rc" |
| diff --git a/win32/uninstall.c b/win32/uninstall.c |
| t@@ -1,196 +0,0 @@
-/************************************************************************
- * uninstall.c Simple Win32 uninstaller for dopewars *
- * Copyright (C) 2001-2004 Ben Webb *
- * Email: benwebb@users.sf.net *
- * WWW: https://dopewars.sourceforge.io/ *
- * *
- * This program is free software; you can redistribute it and/or *
- * modify it under the terms of the GNU General Public License *
- * as published by the Free Software Foundation; either version 2 *
- * of the License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
- * MA 02111-1307, USA. *
- ************************************************************************/
-
-#include
-#include
-#include
-#include
-#include "contid.h"
-#include "guifunc.h"
-#include "util.h"
-
-HINSTANCE hInst;
-HWND mainDlg;
-char *product;
-
-char *GetProduct(void)
-{
- char *product;
-
- product = strrchr(GetCommandLine(), ' ');
- if (product && strlen(product + 1) > 0)
- return bstrdup(++product);
- else {
- DisplayError("This program should be called with a product ID",
- FALSE, TRUE);
- ExitProcess(1);
- }
-}
-
-DWORD WINAPI DoUninstall(LPVOID lpParam)
-{
- InstData *idata;
- HANDLE fin;
- HWND delstat;
- bstr *str;
- char *startmenu, *desktop, *installdir;
-
- installdir = GetInstallDir(product);
-
- if (!SetCurrentDirectory(installdir)) {
- str = bstr_new();
- bstr_assign(str, "Could not access install directory ");
- bstr_append(str, installdir);
- DisplayError(str->text, TRUE, TRUE);
- /* Pointless to try to free the bstr, since DisplayError ends the
- * process */
- }
-
- fin = CreateFile("install.log", GENERIC_READ, 0, NULL,
- OPEN_EXISTING, 0, NULL);
-
- if (fin) {
- idata = ReadOldInstData(fin, product, installdir);
- CloseHandle(fin);
- DeleteFile("install.log");
-
- RemoveService(idata->service);
-
- delstat = GetDlgItem(mainDlg, ST_DELSTAT);
- DeleteFileList(idata->instfiles, delstat, NULL);
- DeleteFileList(idata->extrafiles, delstat, NULL);
-
- startmenu = GetStartMenuDir(idata->flags & IF_ALLUSERS, idata);
- desktop = GetDesktopDir();
- DeleteLinkList(startmenu, idata->startmenu, delstat);
- DeleteLinkList(desktop, idata->desktop, delstat);
-
- RemoveUninstall(startmenu, product, TRUE);
-
- SetCurrentDirectory(desktop); /* Just make sure we're not in the
- * install directory any more */
-
- str = bstr_new();
- if (!RemoveWholeDirectory(installdir)) {
- bstr_assign(str, "Could not remove install directory:\n");
- bstr_append(str, installdir);
- bstr_append(str, "\nYou may wish to manually remove it later.");
- DisplayError(str->text, FALSE, FALSE);
- }
-
- if (!RemoveWholeDirectory(startmenu)) {
- bstr_assign(str, "Could not remove Start Menu directory:\n");
- bstr_append(str, startmenu);
- bstr_append(str, "\nYou may wish to manually remove it later.");
- DisplayError(str->text, FALSE, FALSE);
- }
-
- bstr_assign(str, UninstallKey);
- bstr_appendpath(str, product);
- RegDeleteKey(HKEY_LOCAL_MACHINE, str->text);
- bstr_free(str, TRUE);
-
- bfree(startmenu);
- bfree(desktop);
- FreeInstData(idata, TRUE);
- } else {
- bfree(product);
- bfree(installdir); /* Normally FreeInstData frees these */
- str = bstr_new();
- bstr_assign(str, "Could not read install.log from ");
- bstr_append(str, installdir);
- DisplayError(str->text, TRUE, TRUE);
- /* Pointless to try to free the bstr, since DisplayError ends the
- * process */
- }
- ShowWindow(GetDlgItem(mainDlg, ST_DELDONE), SW_SHOW);
- EnableWindow(GetDlgItem(mainDlg, BT_DELOK), TRUE);
- SetFocus(GetDlgItem(mainDlg, BT_DELOK));
- return 0;
-}
-
-BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam,
- LPARAM lParam)
-{
- HANDLE hThread;
- DWORD threadID;
- static BOOL startedun = FALSE;
-
- switch (msg) {
- case WM_INITDIALOG:
- return TRUE;
- case WM_SHOWWINDOW:
- if (wParam && !startedun) {
- startedun = TRUE;
- hThread = CreateThread(NULL, 0, DoUninstall, NULL, 0, &threadID);
- }
- return TRUE;
- case WM_COMMAND:
- if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == BT_DELOK
- && lParam) {
- PostQuitMessage(0);
- return TRUE;
- }
- break;
- case WM_CLOSE:
- PostQuitMessage(0);
- return TRUE;
- }
- return FALSE;
-}
-
-int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
- LPSTR lpszCmdParam, int nCmdShow)
-{
- MSG msg;
- bstr *str;
-
- product = GetProduct();
-
- str = bstr_new();
- bstr_assign(str, "Are you sure you want to uninstall ");
- bstr_append(str, product);
- bstr_append(str, " ?");
- if (MessageBox(NULL, str->text, "Uninstall", MB_YESNO) == IDNO)
- return (1);
- bstr_free(str, TRUE);
-
- hInst = hInstance;
- if (!hPrevInstance)
- RegisterSepClass(hInstance);
-
- mainDlg = CreateDialog(hInstance, MAKEINTRESOURCE(1), NULL, MainDlgProc);
- SetGuiFont(mainDlg);
-
- EnableWindow(GetDlgItem(mainDlg, BT_DELOK), FALSE);
- ShowWindow(mainDlg, SW_SHOW);
- ShowWindow(GetDlgItem(mainDlg, ST_DELDONE), SW_HIDE);
-
- while (GetMessage(&msg, NULL, 0, 0)) {
- if (!IsDialogMessage(mainDlg, &msg)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
-
- return 0;
-} |
| diff --git a/win32/uninstall.manifest b/win32/uninstall.manifest |
| t@@ -1,21 +0,0 @@
-
-
-
-dopewars drug dealing game uninstall program
-
-
-
-
-
- |
| diff --git a/win32/uninstall.rc b/win32/uninstall.rc |
| t@@ -1,16 +0,0 @@
-#include
-#include "contid.h"
-
-1 24 "uninstall.manifest"
-
-mainicon ICON "setup.ico"
-
-1 DIALOG 17, 40, 190, 115
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Uninstall"
-BEGIN
- CONTROL "", 101, "WC_GTKSEP", 2 | WS_CHILD | WS_VISIBLE, 8, 88, 174, 2
- DEFPUSHBUTTON "OK", BT_DELOK, 75, 96, 39, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP
- LTEXT "Deleting file: dopewars.exe", ST_DELSTAT, 15, 14, 159, 17, WS_CHILD | WS_VISIBLE | WS_GROUP
- LTEXT "All files successfully uninstalled.", ST_DELDONE, 15, 51, 159, 25, WS_CHILD | WS_VISIBLE | WS_GROUP
-END |
| diff --git a/win32/util.c b/win32/util.c |
| t@@ -1,896 +0,0 @@
-/************************************************************************
- * util.c Shared functions for Win32 installer programs *
- * Copyright (C) 2001-2004 Ben Webb *
- * Email: benwebb@users.sf.net *
- * WWW: https://dopewars.sourceforge.io/ *
- * *
- * This program is free software; you can redistribute it and/or *
- * modify it under the terms of the GNU General Public License *
- * as published by the Free Software Foundation; either version 2 *
- * of the License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
- * MA 02111-1307, USA. *
- ************************************************************************/
-
-#include
-#include
-#include
-#include
-#include "util.h"
-
-const char *UninstallKey =
- "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
-const char *UninstallEXE = "bw-uninstall.exe";
-
-static void bstr_append_dir(bstr *str, BOOL windir);
-
-void *bmalloc(UINT numbytes)
-{
- HLOCAL localpt;
-
- if (numbytes <= 0)
- numbytes = 1;
-
- localpt = LocalAlloc(LMEM_FIXED, numbytes);
- if (localpt)
- return (void *)localpt;
- else {
- DisplayError("Could not allocate memory: ", TRUE, TRUE);
- ExitProcess(1);
- }
-}
-
-void bfree(void *pt)
-{
- if (!pt)
- return;
- if (LocalFree((HLOCAL) pt)) {
- DisplayError("Could not free memory: ", TRUE, TRUE);
- }
-}
-
-void *brealloc(void *pt, UINT numbytes)
-{
- UINT numcp;
- void *newpt;
-
- if (!pt && numbytes)
- return bmalloc(numbytes);
- else if (pt && !numbytes) {
- bfree(pt);
- } else if (pt && numbytes) {
- newpt = bmalloc(numbytes);
- memset(newpt, 0, numbytes);
- numcp = LocalSize((HLOCAL) pt);
- if (numbytes < numcp)
- numcp = numbytes;
- memcpy((char *)newpt, (char *)pt, numcp);
- bfree(pt);
- return newpt;
- }
- return NULL;
-}
-
-char *bstrdup(char *str)
-{
- char *newstr;
-
- if (str) {
- newstr = bmalloc(strlen(str) + 1);
- strcpy(newstr, str);
- } else {
- newstr = bmalloc(1);
- newstr[0] = '\0';
- }
- return newstr;
-}
-
-bstr *bstr_new(void)
-{
- bstr *str;
- str = bmalloc(sizeof(bstr));
- str->bufsiz = 64;
- str->length = 0;
- str->text = bmalloc(str->bufsiz);
- str->text[0] = '\0';
- return str;
-}
-
-void bstr_free(bstr *str, BOOL free_text)
-{
- if (free_text)
- bfree(str->text);
- bfree(str);
-}
-
-void bstr_expandby(bstr *str, unsigned extralength)
-{
- if (str->bufsiz >= str->length + 1 + extralength)
- return;
-
- while (str->bufsiz < str->length + 1 + extralength)
- str->bufsiz *= 2;
- str->text = brealloc(str->text, str->bufsiz);
-}
-
-void bstr_setlength(bstr *str, unsigned length)
-{
- if (length <= str->length) {
- str->length = length;
- str->text[length] = '\0';
- } else {
- bstr_expandby(str, length - str->length);
- }
-}
-
-void bstr_assign(bstr *str, const char *text)
-{
- if (text) {
- bstr_setlength(str, strlen(text));
- strcpy(str->text, text);
- str->length = strlen(text);
- } else {
- bstr_setlength(str, 0);
- }
-}
-
-void bstr_append(bstr *str, const char *text)
-{
- if (!text)
- return;
- bstr_expandby(str, strlen(text));
- strcat(str->text, text);
- str->length += strlen(text);
-}
-
-void bstr_appendpath(bstr *str, const char *text)
-{
- if (str->length && str->text[str->length - 1] != '\\') {
- bstr_append_c(str, '\\');
- }
- bstr_append(str, text);
-}
-
-void bstr_append_c(bstr *str, char ch)
-{
- bstr_expandby(str, 1);
- str->text[str->length] = ch;
- str->length++;
- str->text[str->length] = '\0';
-}
-
-/* We can be pretty confident that this is enough space for an integer */
-#define MAX_LENGTH_INT 80
-
-void bstr_append_long(bstr *str, long val)
-{
- char tmpbuf[MAX_LENGTH_INT];
-
- sprintf(tmpbuf, "%ld", val);
- bstr_append(str, tmpbuf);
-}
-
-void bstr_append_windir(bstr *str)
-{
- bstr_append_dir(str, TRUE);
-}
-
-void bstr_append_curdir(bstr *str)
-{
- bstr_append_dir(str, FALSE);
-}
-
-void bstr_assign_windir(bstr *str)
-{
- bstr_setlength(str, 0);
- bstr_append_windir(str);
-}
-
-void bstr_assign_curdir(bstr *str)
-{
- bstr_setlength(str, 0);
- bstr_append_curdir(str);
-}
-
-void bstr_assign_progfilesdir(bstr *str)
-{
- bstr_setlength(str, 0);
- bstr_append_progfilesdir(str);
-}
-
-void bstr_append_progfilesdir(bstr *str)
-{
- HKEY key;
- static const char *subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion";
- static const char *subval = "ProgramFilesDir";
- DWORD keylen, keytype;
- BOOL ok = FALSE;
-
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkey, 0,
- KEY_READ, &key) == ERROR_SUCCESS) {
- if (RegQueryValueEx(key, subval, NULL,
- &keytype, NULL, &keylen) == ERROR_SUCCESS &&
- keytype == REG_SZ) {
- char *progfiledir = bmalloc(keylen);
-
- if (RegQueryValueEx(key, subval, NULL,
- &keytype, progfiledir, &keylen) == ERROR_SUCCESS) {
- bstr_append(str, progfiledir);
- ok = TRUE;
- }
- bfree(progfiledir);
- }
- RegCloseKey(key);
- }
- if (!ok) {
- bstr_append(str, "C:\\Program Files");
- }
-}
-
-void bstr_append_dir(bstr *str, BOOL windir)
-{
- unsigned spaceleft;
- UINT retval;
- int tries;
-
- spaceleft = str->bufsiz - str->length; /* spaceleft includes the
- * null */
-
- for (tries = 0; tries < 5; tries++) {
- if (windir) {
- retval = GetWindowsDirectory(str->text + str->length, spaceleft);
- } else {
- retval = GetCurrentDirectory(spaceleft, str->text + str->length);
- }
- if (retval == 0)
- DisplayError("Cannot get directory: ", TRUE, TRUE);
- if (retval <= spaceleft - 1) {
- str->length += retval;
- break;
- }
- bstr_expandby(str, retval); /* Let's err on the side of caution */
- spaceleft = str->bufsiz - str->length;
- }
- if (tries >= 5)
- DisplayError("Cannot get directory: ", TRUE, TRUE);
-}
-
-void DisplayError(const char *errtext, BOOL addsyserr, BOOL fatal)
-{
- DWORD syserr;
- bstr *str;
- LPTSTR lpMsgBuf;
-
- syserr = GetLastError();
-
- str = bstr_new();
- bstr_assign(str, errtext);
-
- if (addsyserr) {
- bstr_append(str, "; ");
- bstr_append_long(str, syserr);
- bstr_append(str, ": ");
- FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM, NULL, syserr,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&lpMsgBuf, 0, NULL);
- bstr_append(str, lpMsgBuf);
- LocalFree(lpMsgBuf);
- }
-
- MessageBox(NULL, str->text, fatal ? "Fatal Error" : "Error",
- MB_OK | MB_ICONSTOP);
- if (fatal)
- ExitProcess(1);
-}
-
-void AddInstFiles(char *filename, DWORD filesize, InstFiles **lastpt,
- InstFiles **firstpt)
-{
- InstFiles *newpt;
-
- newpt = bmalloc(sizeof(InstFiles));
- if (*lastpt) {
- (*lastpt)->next = newpt;
- } else {
- *firstpt = newpt;
- }
- *lastpt = newpt;
- newpt->next = NULL;
- newpt->filename = filename;
- newpt->filesize = filesize;
-}
-
-void AddInstLink(char *linkfile, char *origfile, char *args,
- InstLink **lastpt, InstLink **firstpt)
-{
- InstLink *newpt;
-
- newpt = bmalloc(sizeof(InstLink));
- if (*lastpt) {
- (*lastpt)->next = newpt;
- } else {
- *firstpt = newpt;
- }
- *lastpt = newpt;
- newpt->next = NULL;
- newpt->linkfile = linkfile;
- newpt->origfile = origfile;
- newpt->args = args;
-}
-
-void FreeLinkList(InstLink *linklist, BOOL freepts)
-{
- InstLink *thispt, *nextpt;
-
- thispt = linklist;
- while (thispt) {
- nextpt = thispt->next;
-
- if (freepts) {
- bfree(thispt->linkfile);
- bfree(thispt->origfile);
- bfree(thispt->args);
- }
- bfree(thispt);
-
- thispt = nextpt;
- }
-}
-
-void FreeFileList(InstFiles *filelist, BOOL freepts)
-{
- InstFiles *thispt, *nextpt;
-
- thispt = filelist;
- while (thispt) {
- nextpt = thispt->next;
-
- if (freepts)
- bfree(thispt->filename);
- bfree(thispt);
-
- thispt = nextpt;
- }
-}
-
-void AddServiceDetails(char *servicename, char *servicedisp,
- char *servicedesc, char *serviceexe,
- NTService **service)
-{
- *service = bmalloc(sizeof(NTService));
- (*service)->name = servicename;
- (*service)->display = servicedisp;
- (*service)->description = servicedesc;
- (*service)->exe = serviceexe;
-}
-
-void FreeServiceDetails(NTService *service, BOOL freepts)
-{
- if (!service)
- return;
-
- if (freepts) {
- bfree(service->name);
- bfree(service->display);
- bfree(service->description);
- bfree(service->exe);
- }
- bfree(service);
-}
-
-void FreeInstData(InstData *idata, BOOL freepts)
-{
- FreeFileList(idata->instfiles, freepts);
- FreeFileList(idata->extrafiles, freepts);
- FreeFileList(idata->keepfiles, freepts);
-
- FreeLinkList(idata->startmenu, freepts);
- FreeLinkList(idata->desktop, freepts);
-
- FreeServiceDetails(idata->service, freepts);
-
- bfree(idata->product);
- bfree(idata->installdir);
- bfree(idata->startmenudir);
-
- bfree(idata);
-}
-
-void WriteInstFlags(HANDLE fout, InstFlags flags)
-{
- DWORD bytes_written;
- char str[3];
-
- str[0] = (char)flags;
- if (!WriteFile(fout, str, 1, &bytes_written, NULL)) {
- printf("Write error\n");
- }
-}
-
-void WriteServiceDetails(HANDLE fout, NTService *service)
-{
- DWORD bytes_written;
- char str[] = "";
-
- if (!service) {
- if (!WriteFile(fout, str, strlen(str) + 1, &bytes_written, NULL)) {
- printf("Write error\n");
- }
- } else {
- if (!WriteFile(fout, service->name, strlen(service->name) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- if (!WriteFile(fout, service->display, strlen(service->display) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- if (!WriteFile
- (fout, service->description, strlen(service->description) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- if (!WriteFile(fout, service->exe, strlen(service->exe) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- }
-}
-
-void WriteLinkList(HANDLE fout, InstLink *listpt)
-{
- char str[] = "";
- DWORD bytes_written;
-
- for (; listpt; listpt = listpt->next) {
- if (!WriteFile(fout, listpt->linkfile, strlen(listpt->linkfile) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- if (!WriteFile(fout, listpt->origfile, strlen(listpt->origfile) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- if (!WriteFile(fout, listpt->args, strlen(listpt->args) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- }
- if (!WriteFile(fout, str, strlen(str) + 1, &bytes_written, NULL)) {
- printf("Write error\n");
- }
-}
-
-void WriteFileList(HANDLE fout, InstFiles *listpt)
-{
- bstr *str;
- DWORD bytes_written;
-
- str = bstr_new();
-
- for (; listpt; listpt = listpt->next) {
- if (!WriteFile(fout, listpt->filename, strlen(listpt->filename) + 1,
- &bytes_written, NULL)) {
- printf("Write error\n");
- }
- bstr_setlength(str, 0);
- bstr_append_long(str, listpt->filesize);
- if (!WriteFile(fout, str->text, str->length + 1, &bytes_written, NULL)) {
- printf("Write error\n");
- }
- }
- bstr_assign(str, "");
- if (!WriteFile(fout, str->text, str->length + 1, &bytes_written, NULL)) {
- printf("Write error\n");
- }
- bstr_free(str, TRUE);
-}
-
-static char *GetSpecialDir(int dirtype)
-{
- LPITEMIDLIST pidl;
- LPMALLOC pmalloc;
- char szDir[MAX_PATH];
- BOOL doneOK = FALSE;
-
- if (SUCCEEDED(SHGetMalloc(&pmalloc))) {
- if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, dirtype, &pidl))) {
- if (SHGetPathFromIDList(pidl, szDir))
- doneOK = TRUE;
- pmalloc->lpVtbl->Free(pmalloc, pidl);
- }
- pmalloc->lpVtbl->Release(pmalloc);
- }
- return (doneOK ? bstrdup(szDir) : NULL);
-}
-
-char *GetStartMenuTopDir(BOOL AllUsers)
-{
- return GetSpecialDir(AllUsers ? CSIDL_COMMON_STARTMENU :
- CSIDL_STARTMENU);
-}
-
-char *GetDesktopDir(void)
-{
- return GetSpecialDir(CSIDL_DESKTOPDIRECTORY);
-}
-
-char *GetStartMenuDir(BOOL AllUsers, InstData *idata)
-{
- bstr *str;
- char *topdir, *retval;
-
- topdir = GetStartMenuTopDir(AllUsers);
-
- str = bstr_new();
-
- bstr_assign(str, topdir);
- bfree(topdir);
-
- bstr_appendpath(str, "Programs");
- bstr_appendpath(str, idata->startmenudir);
-
- retval = str->text;
- bstr_free(str, FALSE);
- return retval;
-}
-
-BOOL CreateWholeDirectory(char *path)
-{
- char *pt;
-
- if (!path)
- return FALSE;
-
- /* We may as well try the easy way first */
- if (CreateDirectory(path, NULL))
- return TRUE;
-
- /* \\machine\share notation */
- if (strlen(path) > 2 && path[0] == '\\' && path[1] == '\\') {
- pt = &path[2]; /* Skip initial "\\" */
- while (*pt && *pt != '\\')
- pt++; /* Skip the machine name */
- /* X: notation */
- } else if (strlen(path) > 2 && path[1] == ':') {
- pt = &path[2]; /* Skip the X: part */
- } else {
- pt = path;
- }
-
-
- while (*pt) {
- pt++;
- if (*pt == '\\') {
- *pt = '\0';
- if (!CreateDirectory(path, NULL)
- && GetLastError() != ERROR_ALREADY_EXISTS) {
- *pt = '\\';
- return FALSE;
- }
- *pt = '\\';
- }
- }
- return (CreateDirectory(path, NULL)
- || GetLastError() == ERROR_ALREADY_EXISTS);
-}
-
-BOOL RemoveWholeDirectory(char *path)
-{
- char *pt;
- BOOL retval;
-
- if (!path || !RemoveDirectory(path))
- return FALSE;
-
- for (pt = &path[strlen(path) - 2]; pt > path; pt--) {
- if (*pt == '\\') {
- *pt = '\0';
- retval = RemoveDirectory(path);
- *pt = '\\';
- if (!retval)
- break;
- }
- }
- return TRUE;
-}
-
-void RemoveService(NTService *service)
-{
- SC_HANDLE scManager, scService;
- SERVICE_STATUS status;
-
- if (!service)
- return;
-
- scManager = OpenSCManager(NULL, NULL, GENERIC_READ);
-
- if (!scManager) {
- DisplayError("Cannot connect to service manager", TRUE, FALSE);
- return;
- }
-
- scService = OpenService(scManager, service->name, DELETE | SERVICE_STOP);
- if (!scService) {
- DisplayError("Cannot open service", TRUE, FALSE);
- } else {
- if (!ControlService(scService, SERVICE_CONTROL_STOP, &status) &&
- GetLastError() != ERROR_SERVICE_NOT_ACTIVE) {
- DisplayError("Cannot stop service", TRUE, FALSE);
- }
- if (!DeleteService(scService)) {
- DisplayError("Cannot delete service", TRUE, FALSE);
- }
- CloseServiceHandle(scService);
- }
-
- CloseServiceHandle(scManager);
-}
-
-char *read_line0(HANDLE hin)
-{
- char *buf;
- int bufsize = 32, strind = 0;
- DWORD bytes_read;
-
- buf = bmalloc(bufsize);
-
- while (1) {
- if (!ReadFile(hin, &buf[strind], 1, &bytes_read, NULL)) {
- printf("Read error\n");
- break;
- }
- if (bytes_read == 0) {
- buf[strind] = '\0';
- break;
- } else if (buf[strind] == '\0')
- break;
- else {
- strind++;
- if (strind >= bufsize) {
- bufsize *= 2;
- buf = brealloc(buf, bufsize);
- }
- }
- }
- if (strind == 0) {
- bfree(buf);
- return NULL;
- } else
- return buf;
-}
-
-InstLink *ReadLinkList(HANDLE fin)
-{
- InstLink *first = NULL, *listpt = NULL, *newpt;
- char *linkfile, *origfile, *args;
-
- while (1) {
- linkfile = read_line0(fin);
- if (!linkfile)
- break;
- origfile = read_line0(fin);
- args = read_line0(fin);
- if (!origfile)
- DisplayError("Corrupt install.log", FALSE, TRUE);
- newpt = bmalloc(sizeof(InstLink));
- if (listpt)
- listpt->next = newpt;
- else
- first = newpt;
- listpt = newpt;
- newpt->next = NULL;
- newpt->linkfile = linkfile;
- newpt->origfile = origfile;
- newpt->args = args;
- }
- return first;
-}
-
-InstFlags ReadInstFlags(HANDLE fin)
-{
- DWORD bytes_read;
- char buf[3];
-
- buf[0] = 0;
- if (!ReadFile(fin, buf, 1, &bytes_read, NULL)) {
- printf("Read error\n");
- }
-
- return (InstFlags)buf[0];
-}
-
-NTService *ReadServiceDetails(HANDLE fin)
-{
- NTService *service = NULL;
- char *name, *disp, *desc, *exe;
-
- name = read_line0(fin);
- if (name) {
- disp = read_line0(fin);
- desc = read_line0(fin);
- exe = read_line0(fin);
- if (!disp || !desc || !exe) {
- DisplayError("Corrupt install.log", FALSE, TRUE);
- } else {
- AddServiceDetails(name, disp, desc, exe, &service);
- }
- }
-
- return service;
-}
-
-InstFiles *ReadFileList(HANDLE fin)
-{
- InstFiles *first = NULL, *listpt = NULL, *newpt;
- char *filename, *filesize;
-
- while (1) {
- filename = read_line0(fin);
- if (!filename)
- break;
- filesize = read_line0(fin);
- if (!filesize)
- DisplayError("Corrupt install.log", FALSE, TRUE);
- newpt = bmalloc(sizeof(InstFiles));
- if (listpt)
- listpt->next = newpt;
- else
- first = newpt;
- listpt = newpt;
-
- newpt->next = NULL;
- newpt->filename = filename;
- newpt->filesize = atol(filesize);
- bfree(filesize);
- }
- return first;
-}
-
-char *GetInstallDir(char *product)
-{
- HKEY key;
- bstr *str;
- DWORD keytype, keylen;
- char *installdir;
-
- str = bstr_new();
- bstr_assign(str, UninstallKey);
- bstr_appendpath(str, product);
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, str->text, 0,
- KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) {
- DisplayError("Could not open registry", FALSE, TRUE);
- }
-
- if (RegQueryValueEx(key, "InstallDirectory", NULL,
- &keytype, NULL, &keylen) != ERROR_SUCCESS ||
- keytype != REG_SZ) {
- DisplayError("Could not query registry key", FALSE, TRUE);
- }
-
- installdir = bmalloc(keylen);
- if (RegQueryValueEx(key, "InstallDirectory", NULL,
- &keytype, installdir, &keylen) != ERROR_SUCCESS) {
- DisplayError("Could not get registry key value", FALSE, TRUE);
- }
- RegCloseKey(key);
-
- bstr_free(str, TRUE);
- return installdir;
-}
-
-InstData *ReadOldInstData(HANDLE fin, char *product, char *installdir)
-{
- InstData *idata;
-
- idata = bmalloc(sizeof(InstData));
-
- idata->product = product;
- idata->installdir = installdir;
- idata->startmenudir = read_line0(fin);
-
- idata->instfiles = ReadFileList(fin);
- idata->extrafiles = ReadFileList(fin);
- idata->keepfiles = NULL;
-
- idata->startmenu = ReadLinkList(fin);
- idata->desktop = ReadLinkList(fin);
-
- idata->service = ReadServiceDetails(fin);
-
- idata->flags = ReadInstFlags(fin);
-
- return idata;
-}
-
-void DeleteFileList(InstFiles *listpt, HWND hwnd, InstFiles *keepfiles)
-{
- bstr *str;
- char *sep;
- InstFiles *keeppt;
-
- str = bstr_new();
- for (; listpt; listpt = listpt->next) {
- keeppt = keepfiles;
- while (keeppt && strcmp(keeppt->filename, listpt->filename) != 0) {
- keeppt = keeppt->next;
- }
- if (keeppt) {
- keeppt->filesize = 1; /* Mark that this file is already
- * installed */
- } else {
- bstr_assign(str, "Deleting file: ");
- bstr_append(str, listpt->filename);
- SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)str->text);
- DeleteFile(listpt->filename);
- sep = strrchr(listpt->filename, '\\');
- if (sep) {
- *sep = '\0';
- RemoveWholeDirectory(listpt->filename);
- *sep = '\\';
- }
- }
- }
- bstr_free(str, TRUE);
-}
-
-void DeleteLinkList(char *dir, InstLink *listpt, HWND hwnd)
-{
- bstr *str;
-
- str = bstr_new();
- if (SetCurrentDirectory(dir)) {
- for (; listpt; listpt = listpt->next) {
- bstr_assign(str, "Deleting shortcut: ");
- bstr_append(str, listpt->linkfile);
- SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)str->text);
- DeleteFile(listpt->linkfile);
- }
- } else {
- bstr_assign(str, "Could not find shortcut directory ");
- bstr_append(str, dir);
- DisplayError(str->text, TRUE, FALSE);
- }
- bstr_free(str, TRUE);
-}
-
-void RemoveUninstall(char *startmenu, char *product, BOOL delexe)
-{
- bstr *inipath, *uninstpath, *uninstlink;
-
- inipath = bstr_new();
- uninstpath = bstr_new();
- uninstlink = bstr_new();
-
- bstr_assign(uninstlink, startmenu);
- bstr_appendpath(uninstlink, "Uninstall ");
- bstr_append(uninstlink, product);
- bstr_append(uninstlink, ".LNK");
- DeleteFile(uninstlink->text);
-
- if (delexe) {
- bstr_assign_windir(inipath);
- bstr_assign(uninstpath, inipath->text);
-
- bstr_appendpath(inipath, "wininit.ini");
- bstr_appendpath(uninstpath, UninstallEXE);
-
- if (!WritePrivateProfileString("Renane", "NUL", uninstpath->text,
- inipath->text)) {
- DisplayError("Cannot write to wininit.ini: ", TRUE, FALSE);
- }
- }
-
- bstr_free(uninstlink, TRUE);
- bstr_free(uninstpath, TRUE);
- bstr_free(inipath, TRUE);
-} |
| diff --git a/win32/util.h b/win32/util.h |
| t@@ -1,119 +0,0 @@
-/************************************************************************
- * util.h Shared functions for Win32 installer programs *
- * Copyright (C) 2001-2004 Ben Webb *
- * Email: benwebb@users.sf.net *
- * WWW: https://dopewars.sourceforge.io/ *
- * *
- * This program is free software; you can redistribute it and/or *
- * modify it under the terms of the GNU General Public License *
- * as published by the Free Software Foundation; either version 2 *
- * of the License, or (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the Free Software *
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
- * MA 02111-1307, USA. *
- ************************************************************************/
-
-#include
-
-typedef struct _bstr {
- char *text;
- unsigned length; /* Length of current text, NOT including
- * terminating null */
- unsigned bufsiz; /* Size of the allocated memory buffer */
-} bstr;
-
-typedef struct _InstFiles {
- char *filename;
- DWORD filesize;
- struct _InstFiles *next;
-} InstFiles;
-
-typedef struct _InstLink {
- char *linkfile;
- char *origfile;
- char *args;
- struct _InstLink *next;
-} InstLink;
-
-typedef struct _NTService {
- char *name;
- char *display;
- char *description;
- char *exe;
-} NTService;
-
-typedef enum {
- IF_ALLUSERS = 1
-} InstFlags;
-
-typedef struct _InstData {
- char *product;
- char *installdir, *startmenudir;
- DWORD totalsize;
- NTService *service;
- InstFiles *instfiles;
- InstFiles *extrafiles;
- InstFiles *keepfiles;
- InstLink *startmenu;
- InstLink *desktop;
- InstFlags flags;
-} InstData;
-
-extern const char *UninstallKey;
-extern const char *UninstallEXE;
-
-void *bmalloc(UINT numbytes);
-void bfree(void *pt);
-void *brealloc(void *pt, UINT numbytes);
-char *bstrdup(char *str);
-
-bstr *bstr_new(void);
-void bstr_free(bstr *str, BOOL free_text);
-void bstr_expandby(bstr *str, unsigned extralength);
-void bstr_setlength(bstr *str, unsigned length);
-void bstr_assign(bstr *str, const char *text);
-void bstr_append(bstr *str, const char *text);
-void bstr_appendpath(bstr *str, const char *text);
-void bstr_append_c(bstr *str, const char ch);
-void bstr_append_long(bstr *str, const long val);
-void bstr_append_windir(bstr *str);
-void bstr_append_curdir(bstr *str);
-void bstr_assign_windir(bstr *str);
-void bstr_assign_curdir(bstr *str);
-void bstr_assign_progfilesdir(bstr *str);
-void bstr_append_progfilesdir(bstr *str);
-
-void DisplayError(const char *errtext, BOOL addsyserr, BOOL fatal);
-void AddInstFiles(char *filename, DWORD filesize, InstFiles **lastpt,
- InstFiles **firstpt);
-void AddInstLink(char *linkfile, char *origfile, char *args,
- InstLink **lastpt, InstLink **firstpt);
-void FreeLinkList(InstLink *linklist, BOOL freepts);
-void FreeFileList(InstFiles *filelist, BOOL freepts);
-void FreeInstData(InstData *idata, BOOL freepts);
-void AddServiceDetails(char *servicename, char *servicedisp,
- char *servicedesc, char *serviceexe,
- NTService **service);
-void FreeServiceDetails(NTService *service, BOOL freepts);
-void WriteServiceDetails(HANDLE fout, NTService *service);
-void WriteInstFlags(HANDLE fout, InstFlags flags);
-void WriteLinkList(HANDLE fout, InstLink *listpt);
-void WriteFileList(HANDLE fout, InstFiles *listpt);
-char *GetStartMenuTopDir(BOOL AllUsers);
-char *GetStartMenuDir(BOOL AllUsers, InstData *idata);
-char *GetDesktopDir(void);
-BOOL CreateWholeDirectory(char *path);
-BOOL RemoveWholeDirectory(char *path);
-void DeleteLinkList(char *dir, InstLink *listpt, HWND hwnd);
-void DeleteFileList(InstFiles *listpt, HWND hwnd, InstFiles *keepfiles);
-InstData *ReadOldInstData(HANDLE fin, char *product, char *installdir);
-char *GetInstallDir(char *product);
-void RemoveService(NTService *service);
-void RemoveUninstall(char *startmenu, char *product, BOOL delexe); |
| diff --git a/win32/zlib/Makefile.nocygwin b/win32/zlib/Makefile.nocygwin |
| t@@ -1,154 +0,0 @@
-# Makefile for zlib
-# Copyright (C) 1995-2003 Jean-loup Gailly.
-# For conditions of distribution and use, see copyright notice in zlib.h
-
-# To compile and test, type:
-# ./configure; make test
-# The call of configure is optional if you don't have special requirements
-# If you wish to build zlib as a shared library, use: ./configure -s
-
-# To use the asm code, type:
-# cp contrib/asm?86/match.S ./match.S
-# make LOC=-DASMV OBJA=match.o
-
-# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
-# make install
-# To install in $HOME instead of /usr/local, use:
-# make install prefix=$HOME
-
-CC=cc -mno-cygwin
-
-CFLAGS=-O
-#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
-#CFLAGS=-g -DDEBUG
-#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
-# -Wstrict-prototypes -Wmissing-prototypes
-
-LDFLAGS=libz.a
-LDSHARED=$(CC)
-CPP=$(CC) -E
-
-LIBS=libz.a
-SHAREDLIB=libz.so
-SHAREDLIBV=libz.so.1.2.1
-SHAREDLIBM=libz.so.1
-
-AR=ar rc
-RANLIB=ranlib
-TAR=tar
-SHELL=/bin/sh
-EXE=
-
-prefix = /usr/local
-exec_prefix = ${prefix}
-libdir = ${exec_prefix}/lib
-includedir = ${prefix}/include
-mandir = ${prefix}/share/man
-man3dir = ${mandir}/man3
-
-OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \
- zutil.o inflate.o infback.o inftrees.o inffast.o
-
-OBJA =
-# to use the asm code: make OBJA=match.o
-
-TEST_OBJS = example.o minigzip.o
-
-all: example$(EXE) minigzip$(EXE)
-
-check: test
-test: all
- @LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
- echo hello world | ./minigzip | ./minigzip -d || \
- echo ' *** minigzip test FAILED ***' ; \
- if ./example; then \
- echo ' *** zlib test OK ***'; \
- else \
- echo ' *** zlib test FAILED ***'; \
- fi
-
-libz.a: $(OBJS) $(OBJA)
- $(AR) $@ $(OBJS) $(OBJA)
- -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
-
-match.o: match.S
- $(CPP) match.S > _match.s
- $(CC) -c _match.s
- mv _match.o match.o
- rm -f _match.s
-
-$(SHAREDLIBV): $(OBJS)
- $(LDSHARED) -o $@ $(OBJS)
- rm -f $(SHAREDLIB) $(SHAREDLIBM)
- ln -s $@ $(SHAREDLIB)
- ln -s $@ $(SHAREDLIBM)
-
-example$(EXE): example.o $(LIBS)
- $(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS)
-
-minigzip$(EXE): minigzip.o $(LIBS)
- $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS)
-
-install: $(LIBS)
- -@if [ ! -d $(exec_prefix) ]; then mkdir -p $(exec_prefix); fi
- -@if [ ! -d $(includedir) ]; then mkdir -p $(includedir); fi
- -@if [ ! -d $(libdir) ]; then mkdir -p $(libdir); fi
- -@if [ ! -d $(man3dir) ]; then mkdir -p $(man3dir); fi
- cp zlib.h zconf.h $(includedir)
- chmod 644 $(includedir)/zlib.h $(includedir)/zconf.h
- cp $(LIBS) $(libdir)
- cd $(libdir); chmod 755 $(LIBS)
- -@(cd $(libdir); $(RANLIB) libz.a || true) >/dev/null 2>&1
- cd $(libdir); if test -f $(SHAREDLIBV); then \
- rm -f $(SHAREDLIB) $(SHAREDLIBM); \
- ln -s $(SHAREDLIBV) $(SHAREDLIB); \
- ln -s $(SHAREDLIBV) $(SHAREDLIBM); \
- (ldconfig || true) >/dev/null 2>&1; \
- fi
- cp zlib.3 $(man3dir)
- chmod 644 $(man3dir)/zlib.3
-# The ranlib in install is needed on NeXTSTEP which checks file times
-# ldconfig is for Linux
-
-uninstall:
- cd $(includedir); \
- cd $(libdir); rm -f libz.a; \
- if test -f $(SHAREDLIBV); then \
- rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \
- fi
- cd $(man3dir); rm -f zlib.3
-
-mostlyclean: clean
-clean:
- rm -f *.o *~ example$(EXE) minigzip$(EXE) \
- libz.* foo.gz so_locations \
- _match.s maketree contrib/infback9/*.o
-
-maintainer-clean: distclean
-distclean: clean
- cp -p Makefile.in Makefile
- cp -p zconf.in.h zconf.h
- rm -f .DS_Store
-
-tags:
- etags *.[ch]
-
-depend:
- makedepend -- $(CFLAGS) -- *.[ch]
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-adler32.o: zlib.h zconf.h
-compress.o: zlib.h zconf.h
-crc32.o: crc32.h zlib.h zconf.h
-deflate.o: deflate.h zutil.h zlib.h zconf.h
-example.o: zlib.h zconf.h
-gzio.o: zutil.h zlib.h zconf.h
-inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
-inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
-infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
-inftrees.o: zutil.h zlib.h zconf.h inftrees.h
-minigzip.o: zlib.h zconf.h
-trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
-uncompr.o: zlib.h zconf.h
-zutil.o: zutil.h zlib.h zconf.h |
| diff --git a/win32/zlib/README.zlib b/win32/zlib/README.zlib |
| t@@ -1,6 +0,0 @@
-If you are intending to build the Win32 installer for dopewars, then place
-the zlib distribution into this directory. The installer expects to
-statically link with the file libz.a in this directory; the libz.a file
-included in the Cygwin distribution should _not_ be used, as this requires
-the CYGWIN.DLL file, which is not a standard Windows DLL. Use the
-Makefile.nocygwin file to compile zlib, as this adds in the -mno-cygwin flag. |