diff --git a/README b/README index 20d5aabb..e1787910 100644 --- a/README +++ b/README @@ -8,34 +8,37 @@ below.) For building on Windows: - - Makefile.vc is for command-line builds on MS Visual C++ systems. - Type `nmake -f Makefile.vc' to build all the PuTTY binaries. + - windows/Makefile.vc is for command-line builds on MS Visual C++ + systems. Change into the `windows' subdirectory and type `nmake + -f Makefile.vc' to build all the PuTTY binaries. (We've also had one report of success building with the OpenWatcom compiler -- www.openwatcom.org -- using Makefile.vc with `wmake -ms -f makefile.vc' and NO_MULTIMON, although we haven't tried this ourselves.) - - Inside the MSVC subdirectory are MS Visual Studio project files - for doing GUI-based builds of the various PuTTY utilities. These - have been tested on Visual Studio 6. + - Inside the windows/MSVC subdirectory are MS Visual Studio project + files for doing GUI-based builds of the various PuTTY utilities. + These have been tested on Visual Studio 6. You should be able to build each PuTTY utility by loading the corresponding .dsp file in Visual Studio. For example, MSVC/putty/putty.dsp builds PuTTY itself, MSVC/plink/plink.dsp builds Plink, and so on. - - Makefile.bor is for the Borland C compiler. Type `make -f - Makefile.bor' to build all the PuTTY binaries. + - windows/Makefile.bor is for the Borland C compiler. Type `make -f + Makefile.bor' while in the `windows' subdirectory to build all + the PuTTY binaries. - - Makefile.cyg is for Cygwin / mingw32 installations. Type `make -f - Makefile.cyg' to build all the PuTTY binaries. Note that by - default the Pageant WinNT security features and the multiple - monitor support are excluded from the Cygwin build, since at the + - windows/Makefile.cyg is for Cygwin / mingw32 installations. Type + `make -f Makefile.cyg' while in the `windows' subdirectory to + build all the PuTTY binaries. Note that by default the multiple + monitor support is excluded from the Cygwin build, since at the time of writing Cygwin doesn't include the necessary headers. - - Makefile.lcc is for lcc-win32. Type `make -f Makefile.lcc'. (You - will probably need to specify COMPAT=-DNO_MULTIMON.) + - windows/Makefile.lcc is for lcc-win32. Type `make -f + Makefile.lcc' while in the `windows' subdirectory. (You will + probably need to specify COMPAT=-DNO_MULTIMON.) For building on Unix: diff --git a/Recipe b/Recipe index 9847d0be..ac7171cc 100644 --- a/Recipe +++ b/Recipe @@ -12,15 +12,16 @@ # Overall project name. !name putty # Locations and types of output Makefiles. -!makefile vc Makefile.vc -!makefile vcproj MSVC -!makefile cygwin Makefile.cyg -!makefile borland Makefile.bor -!makefile lcc Makefile.lcc +!makefile vc windows/Makefile.vc +!makefile vcproj windows/MSVC +!makefile cygwin windows/Makefile.cyg +!makefile borland windows/Makefile.bor +!makefile lcc windows/Makefile.lcc !makefile gtk unix/Makefile.gtk !makefile mpw mac/Makefile.mpw # Source directories. !srcdir charset/ +!srcdir windows/ !srcdir unix/ !srcdir mac/ @@ -109,23 +110,27 @@ # Hack to force version.o to be rebuilt always. !begin vc version.obj: *.c *.h *.rc - cl $(FWHACK) $(VER) $(CFLAGS) /c version.c + cl $(FWHACK) $(VER) $(CFLAGS) /c ..\version.c !end +!specialobj vc version !begin cygwin -version.o: FORCE; +version.o: FORCE FORCE: - $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) $(VER) -c version.c + $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) $(VER) -c ../version.c !end +!specialobj cygwin version !begin borland version.obj: FORCE FORCE: - bcc32 $(FWHACK) $(VER) $(CFLAGS) /c version.c + bcc32 $(FWHACK) $(VER) $(CFLAGS) /c ..\version.c !end +!specialobj borland version !begin lcc version.o: FORCE FORCE: - lcc $(FWHACK) $(VER) $(CFLAGS) /c version.c + lcc $(FWHACK) $(VER) $(CFLAGS) /c ..\version.c !end +!specialobj lcc version # For Unix, we also need the gross MD5 hack that causes automatic # version number selection in release source archives. !begin gtk @@ -137,6 +142,7 @@ FORCE: $(CC) $(COMPAT) $(FWHACK) $(XFLAGS) $(CFLAGS) $(VER) -c ../version.c; \ fi !end +!specialobj gtk version # `make install' target for Unix. !begin gtk @@ -171,7 +177,7 @@ TERMINAL = terminal wcwidth ldiscucs logging tree234 minibidi + config dialog # GUI front end and terminal emulator (putty, puttytel). -GUITERM = TERMINAL window windlg winctrls sizetip unicode printing +GUITERM = TERMINAL window windlg winctrls sizetip winucs winprint + winutils wincfg # Same thing on Unix. @@ -184,7 +190,7 @@ NONSSH = telnet raw rlogin ldisc SSH = ssh sshcrc sshdes sshmd5 sshrsa sshrand sshsha sshblowf + sshdh sshcrcda sshpubk sshzlib sshdss x11fwd portfwd + sshaes sshsh512 sshbn wildcard -WINSSH = SSH noise pageantc +WINSSH = SSH winnoise winpgntc UXSSH = SSH uxnoise uxagentc MACSSH = SSH macnoise @@ -222,18 +228,18 @@ BE_NONE = be_none nocproxy putty : [G] GUITERM NONSSH WINSSH BE_ALL WINMISC win_res.res LIBS puttytel : [G] GUITERM NONSSH BE_NOSSH WINMISC win_res.res LIBS -plink : [C] plink console NONSSH WINSSH BE_ALL logging WINMISC +plink : [C] winplink wincons NONSSH WINSSH BE_ALL logging WINMISC + plink.res LIBS -pscp : [C] scp winsftp console WINSSH BE_SSH SFTP wildcard WINMISC +pscp : [C] scp winsftp wincons WINSSH BE_SSH SFTP wildcard WINMISC + scp.res LIBS -psftp : [C] psftp winsftp console WINSSH BE_SSH SFTP WINMISC scp.res LIBS +psftp : [C] psftp winsftp wincons WINSSH BE_SSH SFTP WINMISC scp.res LIBS -pageant : [G] pageant sshrsa sshpubk sshdes sshbn sshmd5 version tree234 - + misc sshaes sshsha pageantc sshdss sshsh512 winutils winmisc +pageant : [G] winpgnt sshrsa sshpubk sshdes sshbn sshmd5 version tree234 + + misc sshaes sshsha winpgntc sshdss sshsh512 winutils winmisc + pageant.res LIBS -puttygen : [G] puttygen sshrsag sshdssg sshprime sshdes sshbn sshmd5 version - + sshrand noise sshsha winstore misc winctrls sshrsa sshdss winmisc +puttygen : [G] winpgen sshrsag sshdssg sshprime sshdes sshbn sshmd5 version + + sshrand winnoise sshsha winstore misc winctrls sshrsa sshdss winmisc + sshpubk sshaes sshsh512 import winutils puttygen.res tree234 LIBS pterm : [X] UXTERM uxmisc misc ldisc settings pty uxsel BE_NONE uxstore diff --git a/mkfiles.pl b/mkfiles.pl index 8c23127c..840a409d 100755 --- a/mkfiles.pl +++ b/mkfiles.pl @@ -51,6 +51,7 @@ while () { if ($_[0] eq "!name") { $project_name = $_[1]; next; } if ($_[0] eq "!srcdir") { push @srcdirs, $_[1]; next; } if ($_[0] eq "!makefile" and &mfval($_[1])) { $makefiles{$_[1]}=$_[2]; next;} + if ($_[0] eq "!specialobj" and &mfval($_[1])) { $specialobj{$_[1]}->{$_[2]} = 1; next;} if ($_[0] eq "!begin") { if (&mfval($_[1])) { $divert = \$makefile_extra{$_[1]}; @@ -221,8 +222,14 @@ sub dirpfx { my ($path) = shift @_; my ($sep) = shift @_; my $ret = "", $i; - while (($i = index $path, $sep) >= 0) { - $path = substr $path, ($i + length $sep); + + while (($i = index $path, $sep) >= 0 || + ($j = index $path, "/") >= 0) { + if ($i >= 0 and ($j < 0 or $i < $j)) { + $path = substr $path, ($i + length $sep); + } else { + $path = substr $path, ($j + 1); + } $ret .= "..$sep"; } return $ret; @@ -278,12 +285,13 @@ sub splitline { } sub deps { - my ($otmpl, $rtmpl, $prefix, $dirsep, $depchar, $splitchar) = @_; + my ($otmpl, $rtmpl, $prefix, $dirsep, $mftyp, $depchar, $splitchar) = @_; my ($i, $x, $y); my @deps, @ret; @ret = (); $depchar ||= ':'; foreach $i (sort keys %depends) { + next if $specialobj{$mftyp}->{$i}; if ($i =~ /^(.*)\.(res|rsrc)/) { next if !defined $rtmpl; $y = $1; @@ -372,12 +380,6 @@ if (defined $makefiles{'cygwin'}) { " --define WINVER=0x0400 --define MINGW32_FIX=1")."\n". "\n". ".SUFFIXES:\n". - "\n". - "%.o: %.c\n". - "\t\$(CC) \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) -c \$<\n". - "\n". - "%.res.o: %.rc\n". - "\t\$(RC) \$(FWHACK) \$(RCFL) \$(RCFLAGS) \$< \$\@\n". "\n"; print &splitline("all:" . join "", map { " $_.exe" } &progrealnames("GC")); print "\n\n"; @@ -391,9 +393,14 @@ if (defined $makefiles{'cygwin'}) { "-Wl,-Map,$prog.map " . $objstr . " $libstr", 69), "\n\n"; } - foreach $d (&deps("X.o", "X.res.o", $dirpfx, "/")) { + foreach $d (&deps("X.o", "X.res.o", $dirpfx, "/", "cygwin")) { print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})), "\n"; + if ($d->{obj} =~ /\.res\.o$/) { + print "\t\$(RC) \$(FWHACK) \$(RCFL) \$(RCFLAGS) ".$d->{deps}->[0]." ".$d->{obj}."\n\n"; + } else { + print "\t\$(CC) \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) -c ".$d->{deps}->[0]."\n\n"; + } } print "\n"; print $makefile_extra{'cygwin'}; @@ -488,7 +495,7 @@ if (defined $makefiles{'borland'}) { print "\techo " . &objects($p, undef, "X.res", undef) . " >> $prog.rsp\n"; print "\n"; } - foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\")) { + foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\", "borland")) { print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})), "\n"; } @@ -525,13 +532,11 @@ if (defined $makefiles{'vc'}) { "MAKEFILE = Makefile.vc\n". "\n". "# C compilation flags\n". - "CFLAGS = /nologo /W3 /O1 /D_WINDOWS /D_WIN32_WINDOWS=0x401 /DWINVER=0x401\n". + "CFLAGS = /nologo /W3 /O1 " . + (join " ", map {"-I$dirpfx$_"} @srcdirs) . + " /D_WINDOWS /D_WIN32_WINDOWS=0x401 /DWINVER=0x401\n". "LFLAGS = /incremental:no /fixed\n". "\n". - ".c.obj:\n". - "\tcl \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) /c \$*.c\n". - ".rc.res:\n". - "\trc \$(FWHACK) \$(RCFL) -r -DWIN32 -D_WIN32 -DWINVER=0x0400 \$*.rc\n". "\n"; print &splitline("all:" . join "", map { " $_.exe" } &progrealnames("GC")); print "\n\n"; @@ -560,9 +565,14 @@ if (defined $makefiles{'vc'}) { } print "\n"; } - foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\")) { + foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\", "vc")) { print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})), "\n"; + if ($d->{obj} =~ /.obj$/) { + print "\tcl \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) /c ".$d->{deps}->[0],"\n\n"; + } else { + print "\trc \$(FWHACK) \$(RCFL) -r -DWIN32 -D_WIN32 -DWINVER=0x0400 ".$d->{deps}->[0],"\n\n"; + } } print "\n"; print $makefile_extra{'vc'}; @@ -588,6 +598,7 @@ if (defined $makefiles{'vc'}) { } if (defined $makefiles{'vcproj'}) { + $dirpfx = &dirpfx($makefiles{'vcproj'}, "\\"); $orig_dir = cwd; @@ -604,7 +615,7 @@ if (defined $makefiles{'vcproj'}) { mkdir $makefiles{'vcproj'} if(! -d $makefiles{'vcproj'}); chdir $makefiles{'vcproj'}; - @deps = &deps("X.obj", "X.res", "", "\\"); + @deps = &deps("X.obj", "X.res", $dirpfx, "\\", "vcproj"); %all_object_deps = map {$_->{obj} => $_->{deps}} @deps; # Create the project files # Get names of all Windows projects (GUI and console) @@ -739,8 +750,12 @@ if (defined $makefiles{'vcproj'}) { "# PROP Intermediate_Dir \"Release\"\r\n". "# PROP Ignore_Export_Lib 0\r\n". "# PROP Target_Dir \"\"\r\n". - "# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\r\n". - "# ADD CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\r\n". + "# ADD BASE CPP /nologo /W3 /GX /O2 ". + (join " ", map {"/I \"..\\..\\$dirpfx$_\""} @srcdirs) . + " /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\r\n". + "# ADD CPP /nologo /W3 /GX /O2 ". + (join " ", map {"/I \"..\\..\\$dirpfx$_\""} @srcdirs) . + " /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /c\r\n". "# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n". "# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n". "# ADD BASE RSC /l 0x809 /d \"NDEBUG\"\r\n". @@ -766,8 +781,12 @@ if (defined $makefiles{'vcproj'}) { "# PROP Intermediate_Dir \"Debug\"\r\n". "# PROP Ignore_Export_Lib 0\r\n". "# PROP Target_Dir \"\"\r\n". - "# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\r\n". - "# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\r\n". + "# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od ". + (join " ", map {"/I \"..\\..\\$dirpfx$_\""} @srcdirs) . + " /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\r\n". + "# ADD CPP /nologo /W3 /Gm /GX /ZI /Od ". + (join " ", map {"/I \"..\\..\\$dirpfx$_\""} @srcdirs) . + " /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /YX /FD /GZ /c\r\n". "# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n". "# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n". "# ADD BASE RSC /l 0x809 /d \"_DEBUG\"\r\n". @@ -889,7 +908,7 @@ if (defined $makefiles{'gtk'}) { print &splitline("\t\$(CC)" . $mw . " \$(${type}LDFLAGS) -o \$@ " . $objstr . " $libstr", 69), "\n\n"; } - foreach $d (&deps("X.o", undef, $dirpfx, "/")) { + foreach $d (&deps("X.o", undef, $dirpfx, "/", "gtk")) { print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})), "\n"; } @@ -1008,14 +1027,14 @@ if (defined $makefiles{'mpw'}) { } } - foreach $d (&deps("", "X.rsrc", "::", ":")) { + foreach $d (&deps("", "X.rsrc", "::", ":", "mpw")) { next unless $d->{obj}; print &splitline(sprintf("%s \xc4 %s", $d->{obj}, join " ", @{$d->{deps}}), undef, "\xb6"), "\n"; print "\tRez ", $d->{deps}->[0], " -o {Targ} {ROptions}\n\n"; } foreach $arch (qw(68K CFM68K)) { - foreach $d (&deps("X.\L$arch\E.o", "", "::", ":")) { + foreach $d (&deps("X.\L$arch\E.o", "", "::", ":", "mpw")) { next unless $d->{obj}; print &splitline(sprintf("%s \xc4 %s", $d->{obj}, join " ", @{$d->{deps}}), @@ -1025,7 +1044,7 @@ if (defined $makefiles{'mpw'}) { } } foreach $arch (qw(PPC Carbon)) { - foreach $d (&deps("X.\L$arch\E.o", "", "::", ":")) { + foreach $d (&deps("X.\L$arch\E.o", "", "::", ":", "mpw")) { next unless $d->{obj}; print &splitline(sprintf("%s \xc4 %s", $d->{obj}, join " ", @{$d->{deps}}), @@ -1064,12 +1083,6 @@ if (defined $makefiles{'lcc'}) { "\n". "\n". "# Get include directory for resource compiler\n". - "\n". - ".c.obj:\n". - &splitline("\tlcc -O -p6 \$(COMPAT) \$(FWHACK)". - " \$(XFLAGS) \$(CFLAGS) \$*.c",69)."\n". - ".rc.res:\n". - &splitline("\tlrc \$(FWHACK) \$(RCFL) -r \$*.rc",69)."\n". "\n"; print &splitline("all:" . join "", map { " $_.exe" } &progrealnames("GC")); print "\n\n"; @@ -1084,9 +1097,15 @@ if (defined $makefiles{'lcc'}) { print "\n\n"; } - foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\")) { + foreach $d (&deps("X.obj", "X.res", $dirpfx, "\\", "lcc")) { print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})), "\n"; + if ($d->{obj} =~ /\.obj$/) { + print &splitline("\tlcc -O -p6 \$(COMPAT) \$(FWHACK)". + " \$(XFLAGS) \$(CFLAGS) ".$d->{deps}->[0],69)."\n"; + } else { + print &splitline("\tlrc \$(FWHACK) \$(RCFL) -r ".$d->{deps}->[0],69)."\n"; + } } print "\n"; print $makefile_extra{'lcc'}; diff --git a/website.url b/website.url deleted file mode 100644 index 70546b78..00000000 Binary files a/website.url and /dev/null differ diff --git a/pageant.ico b/windows/pageant.ico similarity index 100% rename from pageant.ico rename to windows/pageant.ico diff --git a/pageant.mft b/windows/pageant.mft similarity index 100% rename from pageant.mft rename to windows/pageant.mft diff --git a/pageant.rc b/windows/pageant.rc similarity index 100% rename from pageant.rc rename to windows/pageant.rc diff --git a/pageants.ico b/windows/pageants.ico similarity index 100% rename from pageants.ico rename to windows/pageants.ico diff --git a/plink.rc b/windows/plink.rc similarity index 100% rename from plink.rc rename to windows/plink.rc diff --git a/putty.ico b/windows/putty.ico similarity index 100% rename from putty.ico rename to windows/putty.ico diff --git a/putty.iss b/windows/putty.iss similarity index 97% rename from putty.iss rename to windows/putty.iss index c59eb16b..b78f2471 100644 --- a/putty.iss +++ b/windows/putty.iss @@ -1,62 +1,62 @@ -; -*- no -*- -; putty.iss -; -; -- Inno Setup installer script for PuTTY and its related tools. -; -; TODO for future releases: -; -; - It would be neighbourly to set up an [UninstallRun] entry that ran -; some close cousin of `putty -cleanup', only it should prompt first -; in case the user wants to keep stuff. And make the `leave it alone' -; button the DEFAULT. And perhaps warn that on NT-style systems not -; everything will be caught by this. -; -; - The Quick Launch bar is an interesting thought. Certainly a fair -; number of people actually _believe_ my silly joke about how PuTTY -; is the only thing that makes Windows usable, so perhaps they'd like -; that. Unchecked by default, though, I think. -; * does this need to be conditional on the Windows version? - -[Setup] -AppName=PuTTY -AppVerName=PuTTY version 0.56 -DefaultDirName={pf}\PuTTY -DefaultGroupName=PuTTY -UninstallDisplayIcon={app}\putty.exe -ChangesAssociations=yes -Compression=zip/9 - -[Files] -Source: "putty.exe"; DestDir: "{app}" -Source: "pageant.exe"; DestDir: "{app}" -Source: "puttygen.exe"; DestDir: "{app}" -Source: "pscp.exe"; DestDir: "{app}" -Source: "psftp.exe"; DestDir: "{app}" -Source: "plink.exe"; DestDir: "{app}" -Source: "website.url"; DestDir: "{app}" -Source: "doc\putty.hlp"; DestDir: "{app}" -Source: "doc\putty.cnt"; DestDir: "{app}" -Source: "LICENCE"; DestDir: "{app}" -Source: "README.txt"; DestDir: "{app}"; Flags: isreadme - -[Icons] -Name: "{group}\PuTTY"; Filename: "{app}\putty.exe"; Tasks: startmenu -Name: "{group}\PuTTY Manual"; Filename: "{app}\putty.hlp"; Tasks: startmenu -Name: "{group}\PuTTY Web Site"; Filename: "{app}\website.url"; Tasks: startmenu -Name: "{group}\PSFTP"; Filename: "{app}\psftp.exe"; Tasks: startmenu -Name: "{group}\PuTTYgen"; Filename: "{app}\puttygen.exe"; Tasks: startmenu -Name: "{group}\Pageant"; Filename: "{app}\pageant.exe"; Tasks: startmenu -Name: "{userdesktop}\PuTTY"; Filename: "{app}\putty.exe"; Tasks: desktopicon - -[Tasks] -Name: startmenu; Description: "Create a &Start Menu group" -Name: desktopicon; Description: "Create a &desktop icon for PuTTY" -Name: associate; Description: "&Associate .PPK files (PuTTY Private Key) with Pageant" - -[Registry] -Root: HKCR; Subkey: ".ppk"; ValueType: string; ValueName: ""; ValueData: "PuTTYPrivateKey"; Flags: uninsdeletevalue; Tasks: associate -Root: HKCR; Subkey: "PuTTYPrivateKey"; ValueType: string; ValueName: ""; ValueData: "PuTTY Private Key File"; Flags: uninsdeletekey; Tasks: associate -Root: HKCR; Subkey: "PuTTYPrivateKey\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\pageant.exe,0"; Tasks: associate -Root: HKCR; Subkey: "PuTTYPrivateKey\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\pageant.exe"" ""%1"""; Tasks: associate -Root: HKCR; Subkey: "PuTTYPrivateKey\shell\edit"; ValueType: string; ValueName: ""; ValueData: "&Edit"; Tasks: associate -Root: HKCR; Subkey: "PuTTYPrivateKey\shell\edit\command"; ValueType: string; ValueName: ""; ValueData: """{app}\puttygen.exe"" ""%1"""; Tasks: associate +; -*- no -*- +; putty.iss +; +; -- Inno Setup installer script for PuTTY and its related tools. +; +; TODO for future releases: +; +; - It would be neighbourly to set up an [UninstallRun] entry that ran +; some close cousin of `putty -cleanup', only it should prompt first +; in case the user wants to keep stuff. And make the `leave it alone' +; button the DEFAULT. And perhaps warn that on NT-style systems not +; everything will be caught by this. +; +; - The Quick Launch bar is an interesting thought. Certainly a fair +; number of people actually _believe_ my silly joke about how PuTTY +; is the only thing that makes Windows usable, so perhaps they'd like +; that. Unchecked by default, though, I think. +; * does this need to be conditional on the Windows version? + +[Setup] +AppName=PuTTY +AppVerName=PuTTY version 0.56 +DefaultDirName={pf}\PuTTY +DefaultGroupName=PuTTY +UninstallDisplayIcon={app}\putty.exe +ChangesAssociations=yes +Compression=zip/9 + +[Files] +Source: "putty.exe"; DestDir: "{app}" +Source: "pageant.exe"; DestDir: "{app}" +Source: "puttygen.exe"; DestDir: "{app}" +Source: "pscp.exe"; DestDir: "{app}" +Source: "psftp.exe"; DestDir: "{app}" +Source: "plink.exe"; DestDir: "{app}" +Source: "website.url"; DestDir: "{app}" +Source: "doc\putty.hlp"; DestDir: "{app}" +Source: "doc\putty.cnt"; DestDir: "{app}" +Source: "LICENCE"; DestDir: "{app}" +Source: "README.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\PuTTY"; Filename: "{app}\putty.exe"; Tasks: startmenu +Name: "{group}\PuTTY Manual"; Filename: "{app}\putty.hlp"; Tasks: startmenu +Name: "{group}\PuTTY Web Site"; Filename: "{app}\website.url"; Tasks: startmenu +Name: "{group}\PSFTP"; Filename: "{app}\psftp.exe"; Tasks: startmenu +Name: "{group}\PuTTYgen"; Filename: "{app}\puttygen.exe"; Tasks: startmenu +Name: "{group}\Pageant"; Filename: "{app}\pageant.exe"; Tasks: startmenu +Name: "{userdesktop}\PuTTY"; Filename: "{app}\putty.exe"; Tasks: desktopicon + +[Tasks] +Name: startmenu; Description: "Create a &Start Menu group" +Name: desktopicon; Description: "Create a &desktop icon for PuTTY" +Name: associate; Description: "&Associate .PPK files (PuTTY Private Key) with Pageant" + +[Registry] +Root: HKCR; Subkey: ".ppk"; ValueType: string; ValueName: ""; ValueData: "PuTTYPrivateKey"; Flags: uninsdeletevalue; Tasks: associate +Root: HKCR; Subkey: "PuTTYPrivateKey"; ValueType: string; ValueName: ""; ValueData: "PuTTY Private Key File"; Flags: uninsdeletekey; Tasks: associate +Root: HKCR; Subkey: "PuTTYPrivateKey\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\pageant.exe,0"; Tasks: associate +Root: HKCR; Subkey: "PuTTYPrivateKey\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\pageant.exe"" ""%1"""; Tasks: associate +Root: HKCR; Subkey: "PuTTYPrivateKey\shell\edit"; ValueType: string; ValueName: ""; ValueData: "&Edit"; Tasks: associate +Root: HKCR; Subkey: "PuTTYPrivateKey\shell\edit\command"; ValueType: string; ValueName: ""; ValueData: """{app}\puttygen.exe"" ""%1"""; Tasks: associate diff --git a/putty.mft b/windows/putty.mft similarity index 100% rename from putty.mft rename to windows/putty.mft diff --git a/puttycfg.ico b/windows/puttycfg.ico similarity index 100% rename from puttycfg.ico rename to windows/puttycfg.ico diff --git a/puttygen.ico b/windows/puttygen.ico similarity index 100% rename from puttygen.ico rename to windows/puttygen.ico diff --git a/puttygen.mft b/windows/puttygen.mft similarity index 100% rename from puttygen.mft rename to windows/puttygen.mft diff --git a/puttygen.rc b/windows/puttygen.rc similarity index 100% rename from puttygen.rc rename to windows/puttygen.rc diff --git a/scp.ico b/windows/scp.ico similarity index 100% rename from scp.ico rename to windows/scp.ico diff --git a/scp.rc b/windows/scp.rc similarity index 100% rename from scp.rc rename to windows/scp.rc diff --git a/sizetip.c b/windows/sizetip.c similarity index 100% rename from sizetip.c rename to windows/sizetip.c diff --git a/windows/website.url b/windows/website.url new file mode 100644 index 00000000..4b50369c Binary files /dev/null and b/windows/website.url differ diff --git a/win_res.h b/windows/win_res.h similarity index 100% rename from win_res.h rename to windows/win_res.h diff --git a/win_res.rc b/windows/win_res.rc similarity index 100% rename from win_res.rc rename to windows/win_res.rc diff --git a/wincfg.c b/windows/wincfg.c similarity index 100% rename from wincfg.c rename to windows/wincfg.c diff --git a/console.c b/windows/wincons.c similarity index 100% rename from console.c rename to windows/wincons.c diff --git a/winctrls.c b/windows/winctrls.c similarity index 100% rename from winctrls.c rename to windows/winctrls.c diff --git a/windefs.c b/windows/windefs.c similarity index 100% rename from windefs.c rename to windows/windefs.c diff --git a/windlg.c b/windows/windlg.c similarity index 100% rename from windlg.c rename to windows/windlg.c diff --git a/window.c b/windows/window.c similarity index 100% rename from window.c rename to windows/window.c diff --git a/winhelp.h b/windows/winhelp.h similarity index 100% rename from winhelp.h rename to windows/winhelp.h diff --git a/winmisc.c b/windows/winmisc.c similarity index 100% rename from winmisc.c rename to windows/winmisc.c diff --git a/winnet.c b/windows/winnet.c similarity index 100% rename from winnet.c rename to windows/winnet.c diff --git a/noise.c b/windows/winnoise.c similarity index 100% rename from noise.c rename to windows/winnoise.c diff --git a/puttygen.c b/windows/winpgen.c similarity index 100% rename from puttygen.c rename to windows/winpgen.c diff --git a/pageant.c b/windows/winpgnt.c similarity index 100% rename from pageant.c rename to windows/winpgnt.c diff --git a/pageantc.c b/windows/winpgntc.c similarity index 100% rename from pageantc.c rename to windows/winpgntc.c diff --git a/plink.c b/windows/winplink.c similarity index 100% rename from plink.c rename to windows/winplink.c diff --git a/printing.c b/windows/winprint.c similarity index 100% rename from printing.c rename to windows/winprint.c diff --git a/winsftp.c b/windows/winsftp.c similarity index 100% rename from winsftp.c rename to windows/winsftp.c diff --git a/winstore.c b/windows/winstore.c similarity index 100% rename from winstore.c rename to windows/winstore.c diff --git a/winstuff.h b/windows/winstuff.h similarity index 100% rename from winstuff.h rename to windows/winstuff.h diff --git a/unicode.c b/windows/winucs.c similarity index 100% rename from unicode.c rename to windows/winucs.c diff --git a/winutils.c b/windows/winutils.c similarity index 100% rename from winutils.c rename to windows/winutils.c