From: Lee <ler762@users.sourceforge.net>
Date: Fri, 10 Aug 2018 19:19:09 +0000 (-0400)
Subject: add windows/ build files from the old cvs winsetup/ directory
X-Git-Tag: v_3_0_27~48
X-Git-Url: http://www.privoxy.org/gitweb/%22https:/faq/@default-cgi@/user-manual/static/@default-cgi@edit-actions?a=commitdiff_plain;h=7551f644bf85a7cfe0feac6de9923a7d4c31e82e;p=privoxy.git

add windows/ build files from the old cvs winsetup/ directory
---

diff --git a/windows/MYconfigure b/windows/MYconfigure
new file mode 100755
index 00000000..5b3d55bf
--- /dev/null
+++ b/windows/MYconfigure
@@ -0,0 +1,123 @@
+#!/bin/sh
+# run the configure script for a native Windows build
+
+if [ -f ../configure.in ]; then
+   #  we're in the windows directory, so we need to go up a level
+   cd ..
+fi
+
+if [ ! -f configure ]; then
+   autoheader
+   #   creates config.h.in
+   autoconf
+   #   creates configure
+fi
+
+####### configure options:
+# --help                          Show configure options and a short description
+#
+# --host=i686-w64-mingw32         Use the mingw cross-compiler to build a 'native' windows binary
+# --enable-mingw32                Use mingw32 for a Windows GUI
+# --enable-static-linking         Use static linking instead of dynamic linking (and not have
+#                                 to put all the .DLLs in the path or the same dir as Privoxy)
+# --disable-pthread               Use native threads instead of POSIX pthreads library
+# --disable-dynamic-pcre          Use the built-in, static pcre, even if libpcre is available
+# --with-docbook=yes              Enable docbook documentation creation
+
+
+export CFLAGS="-O2"
+# note: configure.in line 155
+#         if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above)
+#   In other words, if you set CFLAGS you need to include -O2 if you want optimization
+#   assume I'll set cflags below, so set O2 now
+
+export LDFLAGS=""
+# start with initially empty flags
+
+
+### CFLAGS="${CFLAGS} -fstack-protector-strong"
+### LDFLAGS="${LDFLAGS} -fstack-protector-strong"
+# enable stack checking.  NOTE: need to specify when compiling _and_ linking
+# stack-protector-strong: better balance between security and performance.
+#   This flag protects more kinds of vulnerable functions than -fstack-protector does,
+#   but not every function, providing better performance than -fstack-protector-all.
+# see : https://en.wikipedia.org/wiki/Buffer_overflow_protection
+# NOTE: needs static linking or the following in the path:
+#         /usr/i686-w64-mingw32/sys-root/mingw/bin/libssp-0.dll
+
+### CFLAGS="${CFLAGS} -march=native"
+# -march=cpu-type
+#   Generate instructions for the machine type cpu-type.  In contrast to -mtune=cpu-type, which merely tunes the
+#   generated code for the specified cpu-type, -march=cpu-type allows GCC to generate code that may not run at all on
+#   processors other than the one indicated.
+#   Specifying -march=cpu-type implies -mtune=cpu-type.
+#
+# -march=native
+#   This selects the CPU to generate code for at compilation time by determining the processor type of the compiling
+#   machine.  Using -march=native enables all instruction subsets supported by the local machine (hence the result
+#   might not run on different machines).  Using -mtune=native produces code optimized for the local machine under
+#   the constraints of the selected instruction set.
+
+LDFLAGS="${LDFLAGS} -Wl,--nxcompat"
+# https://en.wikipedia.org/wiki/Data_Execution_Prevention
+#   Enable DEP with -Wl,--nxcompat
+
+LDFLAGS="${LDFLAGS} -Wl,--dynamicbase,--export-all-symbols"
+# https://en.wikipedia.org/wiki/Address_space_layout_randomization
+# https://stackoverflow.com/questions/24283918/how-can-i-enable-aslr-dep-and-safeseh-on-an-exe-in-codeblocks-using-mingw
+#   ASLR with gcc has a problem: -Wl,--dynamicbase doesn't emit the necessary relocation table.
+#   As a workaround, you can pass -Wl,--dynamicbase,--export-all-symbols
+#   NOTE: you can't have both this and profiling (cflags='-pg') enabled!
+
+#CFLAGS="${CFLAGS} -pg"
+#LDFLAGS="${LDFLAGS} -pg"
+# Generate extra code to write profile information suitable for the analysis program gprof.
+# Use this option when compiling the source files you want data about, and you must also use it when linking.
+# -- creates a "gmon.out" profile file when the program exits
+# -- then do 'gprof -b privoxy.exe gmon.out'
+#  ??? WHY ???  profiling doesn't work if ASLR is enabled
+
+
+### CFLAGS="${CFLAGS} -Wall"
+# see: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
+# -Wall   doesn't actually turn on all warnings, so add  -Wextra
+#    but then plenty too many complaints by
+#      -Wmissing-field-initializers
+#      -Wsign-compare
+#      -Wtype-limits
+### CFLAGS="${CFLAGS} -Wextra -Wno-missing-field-initializers -Wno-sign-compare -Wno-type-limits"
+
+# CFLAGS="${CFLAGS} -Wconversion"
+#   way too many warnings for things that don't look like a problem
+
+### CFLAGS="${CFLAGS} -Wformat-security"
+# If -Wformat is specified, also warn about uses of format functions that represent possible security problems.
+
+### CFLAGS="${CFLAGS} -Wlogical-op"
+# Warn about suspicious uses of logical operators in expressions.
+
+CFLAGS="${CFLAGS} -Wshadow"
+# Warn whenever a local variable or type declaration shadows
+# another variable or whenever a built-in function is shadowed.
+
+# CFLAGS="${CFLAGS} -Wwrite-strings"
+# These warnings help you find at compile time code that can try to write
+# into a string constant, but only if you have been very careful about
+# using const in declarations and prototypes.
+# >>> Otherwise, it is just a nuisance. <<<  -- this, very much this
+
+echo "CFLAGS=${CFLAGS}"
+echo "LDFLAGS=${LDFLAGS}"
+
+# ./configure cross-compilation options:
+#    --build: the system on which the program will be built.
+#    --host:  the system on which the generated program will run.
+#    --target: only used to build a cross-compiling toolchain.
+
+./configure  --host=i686-w64-mingw32  --enable-mingw32  --enable-zlib \
+             --enable-static-linking \
+             --enable-strptime-sanity-checks \
+             --disable-pthread  --disable-dynamic-pcre \
+             --with-docbook=yes
+
+#  -- done --
diff --git a/windows/WinMessages.nsh b/windows/WinMessages.nsh
new file mode 100755
index 00000000..b18f27d0
--- /dev/null
+++ b/windows/WinMessages.nsh
@@ -0,0 +1,576 @@
+/*
+_____________________________________________________________________________
+
+                       List of common Windows Messages
+_____________________________________________________________________________
+
+ 2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
+
+
+Usage example:
+---------------------------------------------------
+Name "Output"
+OutFile "Output.exe"
+
+!include "WinMessages.nsh"
+
+Section
+	FindWindow $0 '#32770' '' $HWNDPARENT
+	GetDlgItem $1 $0 1027
+	SendMessage $1 ${WM_SETTEXT} 0 'STR:MyText'
+SectionEnd
+---------------------------------------------------
+
+
+Prefix  Message category
+-------------------------
+SW      ShowWindow Commands
+BM      Button control
+CB      Combo box control
+EM      Edit control
+LB      List box control
+WM      General window
+ABM     Application desktop toolbar
+DBT     Device
+DM      Default push button control
+HDM     Header control
+LVM     List view control
+SB      Status bar window
+SBM     Scroll bar control
+STM     Static control
+TCM     Tab control
+-----------------------------------
+
+NOT included messages (WM_USER + X)
+-----------------------------------
+CBEM    Extended combo box control
+CDM     Common dialog box
+DL      Drag list box
+DTM     Date and time picker control
+HKM     Hot key control
+IPM     IP address control
+MCM     Month calendar control
+PBM     Progress bar
+PGM     Pager control
+PSM     Property sheet
+RB      Rebar control
+TB      Toolbar
+TBM     Trackbar
+TTM     Tooltip control
+TVM     Tree-view control
+UDM     Up-down control
+-----------------------------------
+*/
+
+
+!ifndef WINMESSAGES_INCLUDED
+!define WINMESSAGES_INCLUDED
+!verbose push
+!verbose 3
+
+!define HWND_BROADCAST      0xFFFF
+
+#ShowWindow Commands#
+!define SW_HIDE             0
+!define SW_SHOWNORMAL       1
+!define SW_NORMAL           1
+!define SW_SHOWMINIMIZED    2
+!define SW_SHOWMAXIMIZED    3
+!define SW_MAXIMIZE         3
+!define SW_SHOWNOACTIVATE   4
+!define SW_SHOW             5
+!define SW_MINIMIZE         6
+!define SW_SHOWMINNOACTIVE  7
+!define SW_SHOWNA           8
+!define SW_RESTORE          9
+!define SW_SHOWDEFAULT      10
+!define SW_FORCEMINIMIZE    11
+!define SW_MAX              11
+
+#Button Control Messages#
+!define BM_CLICK           0x00F5
+!define BM_GETCHECK        0x00F0
+!define BM_GETIMAGE        0x00F6
+!define BM_GETSTATE        0x00F2
+!define BM_SETCHECK        0x00F1
+!define BM_SETIMAGE        0x00F7
+!define BM_SETSTATE        0x00F3
+!define BM_SETSTYLE        0x00F4
+
+#Combo Box Messages#
+!define CB_ADDSTRING                0x0143
+!define CB_DELETESTRING             0x0144
+!define CB_DIR                      0x0145
+!define CB_FINDSTRING               0x014C
+!define CB_FINDSTRINGEXACT          0x0158
+!define CB_GETCOUNT                 0x0146
+!define CB_GETCURSEL                0x0147
+!define CB_GETDROPPEDCONTROLRECT    0x0152
+!define CB_GETDROPPEDSTATE          0x0157
+!define CB_GETDROPPEDWIDTH          0x015f
+!define CB_GETEDITSEL               0x0140
+!define CB_GETEXTENDEDUI            0x0156
+!define CB_GETHORIZONTALEXTENT      0x015d
+!define CB_GETITEMDATA              0x0150
+!define CB_GETITEMHEIGHT            0x0154
+!define CB_GETLBTEXT                0x0148
+!define CB_GETLBTEXTLEN             0x0149
+!define CB_GETLOCALE                0x015A
+!define CB_GETTOPINDEX              0x015b
+!define CB_INITSTORAGE              0x0161
+!define CB_INSERTSTRING             0x014A
+!define CB_LIMITTEXT                0x0141
+!define CB_MSGMAX                   0x015B  # 0x0162 0x0163
+!define CB_MULTIPLEADDSTRING        0x0163
+!define CB_RESETCONTENT             0x014B
+!define CB_SELECTSTRING             0x014D
+!define CB_SETCURSEL                0x014E
+!define CB_SETDROPPEDWIDTH          0x0160
+!define CB_SETEDITSEL               0x0142
+!define CB_SETEXTENDEDUI            0x0155
+!define CB_SETHORIZONTALEXTENT      0x015e
+!define CB_SETITEMDATA              0x0151
+!define CB_SETITEMHEIGHT            0x0153
+!define CB_SETLOCALE                0x0159
+!define CB_SETTOPINDEX              0x015c
+!define CB_SHOWDROPDOWN             0x014F
+
+!define CB_ERR                      -1
+
+#Edit Control Messages#
+!define EM_CANUNDO              0x00C6
+!define EM_CHARFROMPOS          0x00D7
+!define EM_EMPTYUNDOBUFFER      0x00CD
+!define EM_FMTLINES             0x00C8
+!define EM_GETFIRSTVISIBLELINE  0x00CE
+!define EM_GETHANDLE            0x00BD
+!define EM_GETIMESTATUS         0x00D9
+!define EM_GETLIMITTEXT         0x00D5
+!define EM_GETLINE              0x00C4
+!define EM_GETLINECOUNT         0x00BA
+!define EM_GETMARGINS           0x00D4
+!define EM_GETMODIFY            0x00B8
+!define EM_GETPASSWORDCHAR      0x00D2
+!define EM_GETRECT              0x00B2
+!define EM_GETSEL               0x00B0
+!define EM_GETTHUMB             0x00BE
+!define EM_GETWORDBREAKPROC     0x00D1
+!define EM_LIMITTEXT            0x00C5
+!define EM_LINEFROMCHAR         0x00C9
+!define EM_LINEINDEX            0x00BB
+!define EM_LINELENGTH           0x00C1
+!define EM_LINESCROLL           0x00B6
+!define EM_POSFROMCHAR          0x00D6
+!define EM_REPLACESEL           0x00C2
+!define EM_SCROLL               0x00B5
+!define EM_SCROLLCARET          0x00B7
+!define EM_SETHANDLE            0x00BC
+!define EM_SETIMESTATUS         0x00D8
+!define EM_SETLIMITTEXT         0x00C5  # Same as EM_LIMITTEXT
+!define EM_SETMARGINS           0x00D3
+!define EM_SETMODIFY            0x00B9
+!define EM_SETPASSWORDCHAR      0x00CC
+!define EM_SETREADONLY          0x00CF
+!define EM_SETRECT              0x00B3
+!define EM_SETRECTNP            0x00B4
+!define EM_SETSEL               0x00B1
+!define EM_SETTABSTOPS          0x00CB
+!define EM_SETWORDBREAKPROC     0x00D0
+!define EM_UNDO                 0x00C7
+
+#Listbox Messages#
+!define LB_ADDFILE              0x0196
+!define LB_ADDSTRING            0x0180
+!define LB_DELETESTRING         0x0182
+!define LB_DIR                  0x018D
+!define LB_FINDSTRING           0x018F
+!define LB_FINDSTRINGEXACT      0x01A2
+!define LB_GETANCHORINDEX       0x019D
+!define LB_GETCARETINDEX        0x019F
+!define LB_GETCOUNT             0x018B
+!define LB_GETCURSEL            0x0188
+!define LB_GETHORIZONTALEXTENT  0x0193
+!define LB_GETITEMDATA          0x0199
+!define LB_GETITEMHEIGHT        0x01A1
+!define LB_GETITEMRECT          0x0198
+!define LB_GETLOCALE            0x01A6
+!define LB_GETSEL               0x0187
+!define LB_GETSELCOUNT          0x0190
+!define LB_GETSELITEMS          0x0191
+!define LB_GETTEXT              0x0189
+!define LB_GETTEXTLEN           0x018A
+!define LB_GETTOPINDEX          0x018E
+!define LB_INITSTORAGE          0x01A8
+!define LB_INSERTSTRING         0x0181
+!define LB_ITEMFROMPOINT        0x01A9
+!define LB_MSGMAX               0x01A8  # 0x01B0 0x01B1
+!define LB_MULTIPLEADDSTRING    0x01B1
+!define LB_RESETCONTENT         0x0184
+!define LB_SELECTSTRING         0x018C
+!define LB_SELITEMRANGE         0x019B
+!define LB_SELITEMRANGEEX       0x0183
+!define LB_SETANCHORINDEX       0x019C
+!define LB_SETCARETINDEX        0x019E
+!define LB_SETCOLUMNWIDTH       0x0195
+!define LB_SETCOUNT             0x01A7
+!define LB_SETCURSEL            0x0186
+!define LB_SETHORIZONTALEXTENT  0x0194
+!define LB_SETITEMDATA          0x019A
+!define LB_SETITEMHEIGHT        0x01A0
+!define LB_SETLOCALE            0x01A5
+!define LB_SETSEL               0x0185
+!define LB_SETTABSTOPS          0x0192
+!define LB_SETTOPINDEX          0x0197
+
+!define LB_ERR                  -1
+
+#Window Messages#
+!define WM_ACTIVATE                     0x0006
+!define WM_ACTIVATEAPP                  0x001C
+!define WM_AFXFIRST                     0x0360
+!define WM_AFXLAST                      0x037F
+!define WM_APP                          0x8000
+!define WM_APPCOMMAND                   0x0319
+!define WM_ASKCBFORMATNAME              0x030C
+!define WM_CANCELJOURNAL                0x004B
+!define WM_CANCELMODE                   0x001F
+!define WM_CAPTURECHANGED               0x0215
+!define WM_CHANGECBCHAIN                0x030D
+!define WM_CHANGEUISTATE                0x0127
+!define WM_CHAR                         0x0102
+!define WM_CHARTOITEM                   0x002F
+!define WM_CHILDACTIVATE                0x0022
+!define WM_CLEAR                        0x0303
+!define WM_CLOSE                        0x0010
+!define WM_COMMAND                      0x0111
+!define WM_COMMNOTIFY                   0x0044  # no longer suported
+!define WM_COMPACTING                   0x0041
+!define WM_COMPAREITEM                  0x0039
+!define WM_CONTEXTMENU                  0x007B
+!define WM_CONVERTREQUESTEX             0x108
+!define WM_COPY                         0x0301
+!define WM_COPYDATA                     0x004A
+!define WM_CREATE                       0x0001
+!define WM_CTLCOLOR                     0x0019
+!define WM_CTLCOLORBTN                  0x0135
+!define WM_CTLCOLORDLG                  0x0136
+!define WM_CTLCOLOREDIT                 0x0133
+!define WM_CTLCOLORLISTBOX              0x0134
+!define WM_CTLCOLORMSGBOX               0x0132
+!define WM_CTLCOLORSCROLLBAR            0x0137
+!define WM_CTLCOLORSTATIC               0x0138
+!define WM_CUT                          0x0300
+!define WM_DDE_FIRST                    0x3E0
+!define WM_DEADCHAR                     0x0103
+!define WM_DELETEITEM                   0x002D
+!define WM_DESTROY                      0x0002
+!define WM_DESTROYCLIPBOARD             0x0307
+!define WM_DEVICECHANGE                 0x0219
+!define WM_DEVMODECHANGE                0x001B
+!define WM_DISPLAYCHANGE                0x007E
+!define WM_DRAWCLIPBOARD                0x0308
+!define WM_DRAWITEM                     0x002B
+!define WM_DROPFILES                    0x0233
+!define WM_ENABLE                       0x000A
+!define WM_ENDSESSION                   0x0016
+!define WM_ENTERIDLE                    0x0121
+!define WM_ENTERMENULOOP                0x0211
+!define WM_ENTERSIZEMOVE                0x0231
+!define WM_ERASEBKGND                   0x0014
+!define WM_EXITMENULOOP                 0x0212
+!define WM_EXITSIZEMOVE                 0x0232
+!define WM_FONTCHANGE                   0x001D
+!define WM_GETDLGCODE                   0x0087
+!define WM_GETFONT                      0x0031
+!define WM_GETHOTKEY                    0x0033
+!define WM_GETICON                      0x007F
+!define WM_GETMINMAXINFO                0x0024
+!define WM_GETOBJECT                    0x003D
+!define WM_GETTEXT                      0x000D
+!define WM_GETTEXTLENGTH                0x000E
+!define WM_HANDHELDFIRST                0x0358
+!define WM_HANDHELDLAST                 0x035F
+!define WM_HELP                         0x0053
+!define WM_HOTKEY                       0x0312
+!define WM_HSCROLL                      0x0114
+!define WM_HSCROLLCLIPBOARD             0x030E
+!define WM_ICONERASEBKGND               0x0027
+!define WM_IME_CHAR                     0x0286
+!define WM_IME_COMPOSITION              0x010F
+!define WM_IME_COMPOSITIONFULL          0x0284
+!define WM_IME_CONTROL                  0x0283
+!define WM_IME_ENDCOMPOSITION           0x010E
+!define WM_IME_KEYDOWN                  0x0290
+!define WM_IME_KEYLAST                  0x010F
+!define WM_IME_KEYUP                    0x0291
+!define WM_IME_NOTIFY                   0x0282
+!define WM_IME_REQUEST                  0x0288
+!define WM_IME_SELECT                   0x0285
+!define WM_IME_SETCONTEXT               0x0281
+!define WM_IME_STARTCOMPOSITION         0x010D
+!define WM_INITDIALOG                   0x0110
+!define WM_INITMENU                     0x0116
+!define WM_INITMENUPOPUP                0x0117
+!define WM_INPUT                        0x00FF
+!define WM_INPUTLANGCHANGE              0x0051
+!define WM_INPUTLANGCHANGEREQUEST       0x0050
+!define WM_KEYDOWN                      0x0100
+!define WM_KEYFIRST                     0x0100
+!define WM_KEYLAST                      0x0108
+!define WM_KEYUP                        0x0101
+!define WM_KILLFOCUS                    0x0008
+!define WM_LBUTTONDBLCLK                0x0203
+!define WM_LBUTTONDOWN                  0x0201
+!define WM_LBUTTONUP                    0x0202
+!define WM_MBUTTONDBLCLK                0x0209
+!define WM_MBUTTONDOWN                  0x0207
+!define WM_MBUTTONUP                    0x0208
+!define WM_MDIACTIVATE                  0x0222
+!define WM_MDICASCADE                   0x0227
+!define WM_MDICREATE                    0x0220
+!define WM_MDIDESTROY                   0x0221
+!define WM_MDIGETACTIVE                 0x0229
+!define WM_MDIICONARRANGE               0x0228
+!define WM_MDIMAXIMIZE                  0x0225
+!define WM_MDINEXT                      0x0224
+!define WM_MDIREFRESHMENU               0x0234
+!define WM_MDIRESTORE                   0x0223
+!define WM_MDISETMENU                   0x0230
+!define WM_MDITILE                      0x0226
+!define WM_MEASUREITEM                  0x002C
+!define WM_MENUCHAR                     0x0120
+!define WM_MENUCOMMAND                  0x0126
+!define WM_MENUDRAG                     0x0123
+!define WM_MENUGETOBJECT                0x0124
+!define WM_MENURBUTTONUP                0x0122
+!define WM_MENUSELECT                   0x011F
+!define WM_MOUSEACTIVATE                0x0021
+!define WM_MOUSEFIRST                   0x0200
+!define WM_MOUSEHOVER                   0x02A1
+!define WM_MOUSELAST                    0x0209  # 0x020A 0x020D
+!define WM_MOUSELEAVE                   0x02A3
+!define WM_MOUSEMOVE                    0x0200
+!define WM_MOUSEWHEEL                   0x020A
+!define WM_MOVE                         0x0003
+!define WM_MOVING                       0x0216
+!define WM_NCACTIVATE                   0x0086
+!define WM_NCCALCSIZE                   0x0083
+!define WM_NCCREATE                     0x0081
+!define WM_NCDESTROY                    0x0082
+!define WM_NCHITTEST                    0x0084
+!define WM_NCLBUTTONDBLCLK              0x00A3
+!define WM_NCLBUTTONDOWN                0x00A1
+!define WM_NCLBUTTONUP                  0x00A2
+!define WM_NCMBUTTONDBLCLK              0x00A9
+!define WM_NCMBUTTONDOWN                0x00A7
+!define WM_NCMBUTTONUP                  0x00A8
+!define WM_NCMOUSEHOVER                 0x02A0
+!define WM_NCMOUSELEAVE                 0x02A2
+!define WM_NCMOUSEMOVE                  0x00A0
+!define WM_NCPAINT                      0x0085
+!define WM_NCRBUTTONDBLCLK              0x00A6
+!define WM_NCRBUTTONDOWN                0x00A4
+!define WM_NCRBUTTONUP                  0x00A5
+!define WM_NCXBUTTONDBLCLK              0x00AD
+!define WM_NCXBUTTONDOWN                0x00AB
+!define WM_NCXBUTTONUP                  0x00AC
+!define WM_NEXTDLGCTL                   0x0028
+!define WM_NEXTMENU                     0x0213
+!define WM_NOTIFY                       0x004E
+!define WM_NOTIFYFORMAT                 0x0055
+!define WM_NULL                         0x0000
+!define WM_PAINT                        0x000F
+!define WM_PAINTCLIPBOARD               0x0309
+!define WM_PAINTICON                    0x0026
+!define WM_PALETTECHANGED               0x0311
+!define WM_PALETTEISCHANGING            0x0310
+!define WM_PARENTNOTIFY                 0x0210
+!define WM_PASTE                        0x0302
+!define WM_PENWINFIRST                  0x0380
+!define WM_PENWINLAST                   0x038F
+!define WM_POWER                        0x0048
+!define WM_POWERBROADCAST               0x0218
+!define WM_PRINT                        0x0317
+!define WM_PRINTCLIENT                  0x0318
+!define WM_QUERYDRAGICON                0x0037
+!define WM_QUERYENDSESSION              0x0011
+!define WM_QUERYNEWPALETTE              0x030F
+!define WM_QUERYOPEN                    0x0013
+!define WM_QUERYUISTATE                 0x0129
+!define WM_QUEUESYNC                    0x0023
+!define WM_QUIT                         0x0012
+!define WM_RBUTTONDBLCLK                0x0206
+!define WM_RBUTTONDOWN                  0x0204
+!define WM_RBUTTONUP                    0x0205
+!define WM_RASDIALEVENT                 0xCCCD
+!define WM_RENDERALLFORMATS             0x0306
+!define WM_RENDERFORMAT                 0x0305
+!define WM_SETCURSOR                    0x0020
+!define WM_SETFOCUS                     0x0007
+!define WM_SETFONT                      0x0030
+!define WM_SETHOTKEY                    0x0032
+!define WM_SETICON                      0x0080
+!define WM_SETREDRAW                    0x000B
+!define WM_SETTEXT                      0x000C
+!define WM_SETTINGCHANGE                0x001A  # Same as WM_WININICHANGE
+!define WM_SHOWWINDOW                   0x0018
+!define WM_SIZE                         0x0005
+!define WM_SIZECLIPBOARD                0x030B
+!define WM_SIZING                       0x0214
+!define WM_SPOOLERSTATUS                0x002A
+!define WM_STYLECHANGED                 0x007D
+!define WM_STYLECHANGING                0x007C
+!define WM_SYNCPAINT                    0x0088
+!define WM_SYSCHAR                      0x0106
+!define WM_SYSCOLORCHANGE               0x0015
+!define WM_SYSCOMMAND                   0x0112
+!define WM_SYSDEADCHAR                  0x0107
+!define WM_SYSKEYDOWN                   0x0104
+!define WM_SYSKEYUP                     0x0105
+!define WM_TABLET_FIRST                 0x02C0
+!define WM_TABLET_LAST                  0x02DF
+!define WM_THEMECHANGED                 0x031A
+!define WM_TCARD                        0x0052
+!define WM_TIMECHANGE                   0x001E
+!define WM_TIMER                        0x0113
+!define WM_UNDO                         0x0304
+!define WM_UNICHAR                      0x0109
+!define WM_UNINITMENUPOPUP              0x0125
+!define WM_UPDATEUISTATE                0x0128
+!define WM_USER                         0x400
+!define WM_USERCHANGED                  0x0054
+!define WM_VKEYTOITEM                   0x002E
+!define WM_VSCROLL                      0x0115
+!define WM_VSCROLLCLIPBOARD             0x030A
+!define WM_WINDOWPOSCHANGED             0x0047
+!define WM_WINDOWPOSCHANGING            0x0046
+!define WM_WININICHANGE                 0x001A
+!define WM_WTSSESSION_CHANGE            0x02B1
+!define WM_XBUTTONDBLCLK                0x020D
+!define WM_XBUTTONDOWN                  0x020B
+!define WM_XBUTTONUP                    0x020C
+
+
+#Application desktop toolbar#
+!define ABM_ACTIVATE         0x00000006  # lParam == TRUE/FALSE means activate/deactivate
+!define ABM_GETAUTOHIDEBAR   0x00000007
+!define ABM_GETSTATE         0x00000004
+!define ABM_GETTASKBARPOS    0x00000005
+!define ABM_NEW              0x00000000
+!define ABM_QUERYPOS         0x00000002
+!define ABM_REMOVE           0x00000001
+!define ABM_SETAUTOHIDEBAR   0x00000008  # This can fail, you MUST check the result
+!define ABM_SETPOS           0x00000003
+!define ABM_WINDOWPOSCHANGED 0x0000009
+
+#Device#
+!define DBT_APPYBEGIN                   0x0000
+!define DBT_APPYEND                     0x0001
+!define DBT_CONFIGCHANGECANCELED        0x0019
+!define DBT_CONFIGCHANGED               0x0018
+!define DBT_CONFIGMGAPI32               0x0022
+!define DBT_CONFIGMGPRIVATE             0x7FFF
+!define DBT_CUSTOMEVENT                 0x8006  # User-defined event
+!define DBT_DEVICEARRIVAL               0x8000  # System detected a new device
+!define DBT_DEVICEQUERYREMOVE           0x8001  # Wants to remove, may fail
+!define DBT_DEVICEQUERYREMOVEFAILED     0x8002  # Removal aborted
+!define DBT_DEVICEREMOVECOMPLETE        0x8004  # Device is gone
+!define DBT_DEVICEREMOVEPENDING         0x8003  # About to remove, still avail.
+!define DBT_DEVICETYPESPECIFIC          0x8005  # Type specific event
+!define DBT_DEVNODES_CHANGED            0x0007
+!define DBT_DEVTYP_DEVICEINTERFACE      0x00000005  # Device interface class
+!define DBT_DEVTYP_DEVNODE              0x00000001  # Devnode number
+!define DBT_DEVTYP_HANDLE               0x00000006  # File system handle
+!define DBT_DEVTYP_NET                  0x00000004  # Network resource
+!define DBT_DEVTYP_OEM                  0x00000000  # Oem-defined device type
+!define DBT_DEVTYP_PORT                 0x00000003  # Serial, parallel
+!define DBT_DEVTYP_VOLUME               0x00000002  # Logical volume
+!define DBT_LOW_DISK_SPACE              0x0048
+!define DBT_MONITORCHANGE               0x001B
+!define DBT_NO_DISK_SPACE               0x0047
+!define DBT_QUERYCHANGECONFIG           0x0017
+!define DBT_SHELLLOGGEDON               0x0020
+!define DBT_USERDEFINED                 0xFFFF
+!define DBT_VOLLOCKLOCKFAILED           0x8043
+!define DBT_VOLLOCKLOCKRELEASED         0x8045
+!define DBT_VOLLOCKLOCKTAKEN            0x8042
+!define DBT_VOLLOCKQUERYLOCK            0x8041
+!define DBT_VOLLOCKQUERYUNLOCK          0x8044
+!define DBT_VOLLOCKUNLOCKFAILED         0x8046
+!define DBT_VPOWERDAPI                  0x8100  # VPOWERD API for Win95
+!define DBT_VXDINITCOMPLETE             0x0023
+
+#Default push button control#
+!define DM_BITSPERPEL       0x00040000
+!define DM_COLLATE          0x00008000
+!define DM_COLOR            0x00000800
+!define DM_COPIES           0x00000100
+!define DM_DEFAULTSOURCE    0x00000200
+!define DM_DISPLAYFLAGS     0x00200000
+!define DM_DISPLAYFREQUENCY 0x00400000
+!define DM_DITHERTYPE       0x04000000
+!define DM_DUPLEX           0x00001000
+!define DM_FORMNAME         0x00010000
+!define DM_GRAYSCALE        0x00000001  # This flag is no longer valid
+!define DM_ICMINTENT        0x01000000
+!define DM_ICMMETHOD        0x00800000
+!define DM_INTERLACED       0x00000002  # This flag is no longer valid
+!define DM_LOGPIXELS        0x00020000
+!define DM_MEDIATYPE        0x02000000
+!define DM_NUP              0x00000040
+!define DM_ORIENTATION      0x00000001
+!define DM_PANNINGHEIGHT    0x10000000
+!define DM_PANNINGWIDTH     0x08000000
+!define DM_PAPERLENGTH      0x00000004
+!define DM_PAPERSIZE        0x00000002
+!define DM_PAPERWIDTH       0x00000008
+!define DM_PELSHEIGHT       0x00100000
+!define DM_PELSWIDTH        0x00080000
+!define DM_POSITION         0x00000020
+!define DM_PRINTQUALITY     0x00000400
+!define DM_SCALE            0x00000010
+!define DM_SPECVERSION      0x0320       # 0x0400 0x0401
+!define DM_TTOPTION         0x00004000
+!define DM_YRESOLUTION      0x00002000
+
+#Header control#
+!define HDM_FIRST           0x1200
+
+#List view control#
+!define LVM_FIRST           0x1000
+
+#Status bar window#
+!define SB_CONST_ALPHA      0x00000001
+!define SB_GRAD_RECT        0x00000010
+!define SB_GRAD_TRI         0x00000020
+!define SB_NONE             0x00000000
+!define SB_PIXEL_ALPHA      0x00000002
+!define SB_PREMULT_ALPHA    0x00000004
+!define SB_SIMPLEID         0x00ff
+
+#Scroll bar control#
+!define SBM_ENABLE_ARROWS           0x00E4  # Not in win3.1
+!define SBM_GETPOS                  0x00E1  # Not in win3.1
+!define SBM_GETRANGE                0x00E3  # Not in win3.1
+!define SBM_GETSCROLLINFO           0x00EA
+!define SBM_SETPOS                  0x00E0  # Not in win3.1
+!define SBM_SETRANGE                0x00E2  # Not in win3.1
+!define SBM_SETRANGEREDRAW          0x00E6  # Not in win3.1
+!define SBM_SETSCROLLINFO           0x00E9
+
+#Static control#
+!define STM_GETICON                 0x0171
+!define STM_GETIMAGE                0x0173
+!define STM_MSGMAX                  0x0174
+!define STM_ONLY_THIS_INTERFACE     0x00000001
+!define STM_ONLY_THIS_NAME          0x00000008
+!define STM_ONLY_THIS_PROTOCOL      0x00000002
+!define STM_ONLY_THIS_TYPE          0x00000004
+!define STM_SETICON                 0x0170
+!define STM_SETIMAGE                0x0172
+
+#Tab control#
+!define TCM_FIRST                   0x1300
+
+!verbose pop
+!endif
\ No newline at end of file
diff --git a/windows/privoxy.ico b/windows/privoxy.ico
new file mode 100755
index 00000000..52920ba8
Binary files /dev/null and b/windows/privoxy.ico differ
diff --git a/windows/privoxy_winthreads.nsi b/windows/privoxy_winthreads.nsi
new file mode 100755
index 00000000..8c9f1131
--- /dev/null
+++ b/windows/privoxy_winthreads.nsi
@@ -0,0 +1,237 @@
+;
+; File:
+;   $Source: /cvsroot/ijbswa/winsetup/privoxy_winthreads.nsi,v $
+;
+; Purpose:
+;   NSIS script to make the Privoxy installer
+;
+;   This .NSI script is designed for NSIS v2.24+
+;
+;   Get NSIS from:  http://www.nullsoft.com/free/nsis/
+;
+; Copyright:
+;   Written by and Copyright (C) 2007-2009 the Privoxy team.
+;   http://www.privoxy.org/
+;
+;   This script originally written by and Copyright (C) 2002
+;   Jonathan Foster
+;
+;   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.
+;
+;   The GNU General Public License should be included with
+;   this file.  If not, you can view it at
+;   http://www.gnu.org/copyleft/gpl.html
+;   or write to the Free Software Foundation, Inc., 59
+;   Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+;
+
+!include WinMessages.nsh ; to send close message to Privoxy process
+
+!define NL "$\r$\n"
+
+Var /GLOBAL UpdateExisting
+
+;win7 RequestExecutionLevel admin
+
+
+; Close Privoxy and wait for termination
+;
+!macro ClosePrivoxy
+	;Close privoxy.exe
+	FindWindow $R0 "PrivoxyLogOwner"
+	IntCmpU $R0 0 NoPrivoxyRunning 0 0
+	SendMessage $R0 ${WM_CLOSE} 0 0
+	; wait for close
+	StrCpy $R1 0
+CheckWindowClosed:
+	Sleep 200 ; avoid file in use error
+	FindWindow $R0 "PrivoxyLogOwner"
+	IntCmpU $R0 0 NoPrivoxyRunning 0 0
+	IntOp $R1 $R1 + 1
+	IntCmp $R1 20 0 CheckWindowClosed 0
+	Sleep 200 ; avoid file in use error
+NoPrivoxyRunning:
+!macroend
+
+
+; create a backup file if file exists, set $UpdateExisting on existing files
+;
+!macro BackupOLD Name BackupName
+	!define UniqueID ${__LINE__}
+
+	IfFileExists "$INSTDIR\${Name}"  0 skip_${UniqueID}
+	StrCpy $UpdateExisting 1
+	delete "$INSTDIR\${BackupName}"
+	rename "$INSTDIR\${Name}" "$INSTDIR\${BackupName}"
+skip_${UniqueID}:
+
+	!undef UniqueID
+!macroend
+
+
+; check file, write new one to different target there is one, set $UpdateExisting on existing files
+;
+!macro KeepCur Name DefaultName SrcDir
+	!define UniqueID ${__LINE__}
+
+	IfFileExists "$INSTDIR\${Name}" 0 new_${UniqueID}
+	StrCpy $UpdateExisting 1
+	delete "$INSTDIR\${DefaultName}"
+	File "/oname=${DefaultName}" "${SrcDir}${Name}"
+	goto done_${UniqueID}
+
+new_${UniqueID}:
+	File "${SrcDir}${Name}"
+
+done_${UniqueID}:
+
+	!undef UniqueID
+!macroend
+
+
+Name "Privoxy"
+OutFile "privoxy_setup.exe"
+
+BGGradient off
+
+; Some default compiler settings (uncomment and change at will):
+SetCompress auto ; (can be off or force)
+SetCompressor /FINAL /SOLID lzma
+SetDatablockOptimize on
+CRCCheck on
+AutoCloseWindow true ; (can be true for the window go away automatically at end)
+ShowInstDetails nevershow ; (can be show to have them shown, or nevershow to disable)
+SetDateSave on ; (can be on to have files restored to their orginal date)
+; SetOverwrite ifnewer ; (files are only overwritten if the existing file is older than the new file)
+SetOverwrite on  ; install package files over-write existing files regardless of date
+
+Icon "privoxy.ico"
+UninstallIcon "uninstall_privoxy.ico"
+
+#LicenseText "Privoxy is distributed under the GNU General Public License.  Please read it before you install."
+#LicenseData "build/LICENSE.txt"
+
+InstallDir "$PROGRAMFILES\Privoxy"
+;InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Privoxy.org\Privoxy" ""
+;DirShow show ; (make this hide to not let the user change it)
+;DirShow doesn't currently work.
+DirText "Select the directory to install Privoxy in:"
+
+ComponentText "Please select how you want to start Privoxy:"
+
+Section "" ; (default section)
+	StrCpy $UpdateExisting 0
+
+	; Close privoxy.exe if it is running (user is upgrading) to prevent in-use errors.
+	!insertmacro ClosePrivoxy
+
+	; add files / whatever that need to be installed here.
+	SetOutPath "$INSTDIR"
+
+	; save files the user might have changed
+	;   config.txt  match-all.action  trust.txt
+	;
+	!insertmacro BackupOLD "config.txt" "old_config.txt"
+	!insertmacro BackupOLD "match-all.action" "old_match-all.action";
+	!insertmacro BackupOLD "trust.txt" "old_trust.txt"
+
+	;File /r build\*.*
+
+	; leave user.action and user.filter alone if they exist
+	;
+	!insertmacro KeepCur "user.action" "clean_user.action" "build\"
+	!insertmacro KeepCur "user.filter" "clean_user.filter" "build\"
+	; exclude all files handled by KeepCur
+	File /r /x CVS /x user.action /x user.filter build\*.*
+
+	;WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Privoxy.org\Privoxy" "" "$INSTDIR"
+	WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Privoxy" "DisplayName" "Privoxy (remove only)"
+	WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Privoxy" "UninstallString" '"$INSTDIR\privoxy_uninstall.exe"'
+
+	WriteRegStr HKEY_CLASSES_ROOT "PrivoxyActionFile\shell\open\command" "" 'Notepad.exe "%1"'
+	WriteRegStr HKEY_CLASSES_ROOT ".action" "" "PrivoxyActionFile"
+	WriteRegStr HKEY_CLASSES_ROOT "PrivoxyFilterFile\shell\open\command" "" 'Notepad.exe "%1"'
+	WriteRegStr HKEY_CLASSES_ROOT ".filter" "" "PrivoxyFilterFile"
+
+	WriteUninstaller "privoxy_uninstall.exe"
+SectionEnd
+
+Section "Add to Start Menu"
+	SetShellVarContext all ; (Add to "All Users" Start Menu if possible)
+	RMDir /r "$SMPROGRAMS\Privoxy"
+	CreateDirectory "$SMPROGRAMS\Privoxy"
+	CreateShortCut "$SMPROGRAMS\Privoxy\Privoxy.lnk" "$INSTDIR\privoxy.exe"
+	WriteINIStr "$SMPROGRAMS\Privoxy\Web-based Configuration.url" "InternetShortcut" "URL" "http://config.privoxy.org/"
+	CreateShortCut "$SMPROGRAMS\Privoxy\Web-based Feedback.lnk" "$INSTDIR\doc\user-manual\contact.html"
+	CreateDirectory "$SMPROGRAMS\Privoxy\Edit Config"
+	CreateShortCut "$SMPROGRAMS\Privoxy\Edit Config\Main Configuration.lnk" "Notepad.exe" '"$INSTDIR\config.txt"'
+	CreateShortCut "$SMPROGRAMS\Privoxy\Edit Config\Default Actions.lnk" "Notepad.exe" '"$INSTDIR\default.action"'
+	CreateShortCut "$SMPROGRAMS\Privoxy\Edit Config\User Actions.lnk" "Notepad.exe" '"$INSTDIR\user.action"'
+	CreateShortCut "$SMPROGRAMS\Privoxy\Edit Config\Filters.lnk" "Notepad.exe" '"$INSTDIR\default.filter"'
+	CreateShortCut "$SMPROGRAMS\Privoxy\Edit Config\Trust list.lnk" "Notepad.exe" '"$INSTDIR\trust.txt"'
+	CreateDirectory "$SMPROGRAMS\Privoxy\Documentation"
+	CreateShortCut "$SMPROGRAMS\Privoxy\Documentation\User Manual.lnk" "$INSTDIR\doc\user-manual\index.html"
+	CreateShortCut "$SMPROGRAMS\Privoxy\Documentation\Frequently Asked Questions.lnk" "$INSTDIR\doc\faq\index.html"
+	CreateShortCut "$SMPROGRAMS\Privoxy\Documentation\Credits.lnk" "Notepad.exe" '"$INSTDIR\AUTHORS.txt"'
+	CreateShortCut "$SMPROGRAMS\Privoxy\Documentation\License.lnk" "Notepad.exe" '"$INSTDIR\LICENSE.txt"'
+	CreateShortCut "$SMPROGRAMS\Privoxy\Documentation\ReadMe file.lnk" "Notepad.exe" '"$INSTDIR\README.txt"'
+	WriteINIStr "$SMPROGRAMS\Privoxy\Documentation\Web Site.url" "InternetShortcut" "URL" "http://privoxy.org/"
+	CreateShortCut "$SMPROGRAMS\Privoxy\Uninstall Privoxy.lnk" "$INSTDIR\privoxy_uninstall.exe"
+SectionEnd
+
+
+Section "Run automatically at startup"
+	CreateShortCut "$SMSTARTUP\Privoxy.lnk" "$INSTDIR\privoxy.exe" "" "" 0 SW_SHOWMINIMIZED
+SectionEnd
+
+
+Function .onInstSuccess
+	; on successful install, show message then start it
+	IntCmp $UpdateExisting 0  0 updated updated
+	MessageBox MB_YESNO|MB_DEFBUTTON1|MB_ICONQUESTION "Privoxy has been installed.${NL}${NL}Start Privoxy now?" /SD IDNO IDYES execprivoxy IDNO done
+	goto done
+updated:
+	MessageBox MB_YESNO|MB_DEFBUTTON1|MB_ICONEXCLAMATION "Privoxy has been updated.${NL}Don't forget to convert configuration from the 'old*' files!${NL}${NL}Start Privoxy now?" /SD IDNO IDYES execprivoxy IDNO done
+	goto done
+execprivoxy:
+	; run privoxy after installation
+	SetOutPath "$INSTDIR"
+
+	Exec "$INSTDIR\privoxy.exe"
+done:
+FunctionEnd
+
+
+; begin uninstall settings/section. The UninstallText line must be before the Section header.
+;
+UninstallText "This will uninstall Privoxy from your system"
+Section Uninstall
+	SetShellVarContext all ; (Remove from "All Users" Start Menu if possible)
+	
+	;DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Privoxy.org\Privoxy"
+	DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Privoxy"
+
+	DeleteRegKey HKEY_CLASSES_ROOT ".action"
+	DeleteRegKey HKEY_CLASSES_ROOT "PrivoxyActionFile"
+	DeleteRegKey HKEY_CLASSES_ROOT ".filter"
+	DeleteRegKey HKEY_CLASSES_ROOT "PrivoxyFilterFile"
+
+	Delete "$SMSTARTUP\Privoxy.lnk"
+
+	!insertmacro ClosePrivoxy
+
+	RMDir /r "$SMPROGRAMS\Privoxy"
+	RMDir /r "$INSTDIR"
+SectionEnd
+
+; eof
diff --git a/windows/uninstall_privoxy.ico b/windows/uninstall_privoxy.ico
new file mode 100755
index 00000000..76ef561a
Binary files /dev/null and b/windows/uninstall_privoxy.ico differ