diff options
| -rw-r--r-- | Recipe | 2 | ||||
| -rw-r--r-- | blackbox.R | 2 | ||||
| -rw-r--r-- | bridges.R | 2 | ||||
| -rw-r--r-- | cube.R | 2 | ||||
| -rw-r--r-- | dominosa.R | 2 | ||||
| -rw-r--r-- | fifteen.R | 2 | ||||
| -rw-r--r-- | flip.R | 2 | ||||
| -rw-r--r-- | guess.R | 2 | ||||
| -rw-r--r-- | icons/Makefile | 13 | ||||
| -rw-r--r-- | inertia.R | 2 | ||||
| -rw-r--r-- | lightup.R | 2 | ||||
| -rw-r--r-- | loopy.R | 2 | ||||
| -rw-r--r-- | map.R | 2 | ||||
| -rw-r--r-- | mines.R | 2 | ||||
| -rwxr-xr-x | mkfiles.pl | 60 | ||||
| -rw-r--r-- | net.R | 2 | ||||
| -rw-r--r-- | netslide.R | 2 | ||||
| -rw-r--r-- | pattern.R | 2 | ||||
| -rw-r--r-- | pegs.R | 2 | ||||
| -rw-r--r-- | rect.R | 2 | ||||
| -rw-r--r-- | samegame.R | 2 | ||||
| -rw-r--r-- | sixteen.R | 2 | ||||
| -rw-r--r-- | slant.R | 2 | ||||
| -rw-r--r-- | solo.R | 2 | ||||
| -rw-r--r-- | tents.R | 2 | ||||
| -rw-r--r-- | twiddle.R | 2 | ||||
| -rw-r--r-- | untangle.R | 2 | ||||
| -rw-r--r-- | windows.c | 4 |
28 files changed, 78 insertions, 49 deletions
@@ -13,6 +13,8 @@ !makefile cygwin Makefile.cyg !makefile osx Makefile.osx +!srcdir icons/ + WINDOWS = windows printing + user32.lib gdi32.lib comctl32.lib comdlg32.lib winspool.lib COMMON = midend drawing misc malloc random version @@ -2,7 +2,7 @@ blackbox : [X] GTK COMMON blackbox -blackbox : [G] WINDOWS COMMON blackbox +blackbox : [G] WINDOWS COMMON blackbox blackbox.res? ALL += blackbox @@ -4,7 +4,7 @@ BRIDGES = bridges dsf bridges : [X] GTK COMMON BRIDGES -bridges : [G] WINDOWS COMMON BRIDGES +bridges : [G] WINDOWS COMMON BRIDGES bridges.res? ALL += BRIDGES @@ -2,7 +2,7 @@ cube : [X] GTK COMMON cube -cube : [G] WINDOWS COMMON cube +cube : [G] WINDOWS COMMON cube cube.res? ALL += cube @@ -2,7 +2,7 @@ dominosa : [X] GTK COMMON dominosa -dominosa : [G] WINDOWS COMMON dominosa +dominosa : [G] WINDOWS COMMON dominosa dominosa.res? ALL += dominosa @@ -2,7 +2,7 @@ fifteen : [X] GTK COMMON fifteen -fifteen : [G] WINDOWS COMMON fifteen +fifteen : [G] WINDOWS COMMON fifteen fifteen.res? ALL += fifteen @@ -4,7 +4,7 @@ FLIP = flip tree234 flip : [X] GTK COMMON FLIP -flip : [G] WINDOWS COMMON FLIP +flip : [G] WINDOWS COMMON FLIP flip.res? ALL += FLIP @@ -2,7 +2,7 @@ guess : [X] GTK COMMON guess -guess : [G] WINDOWS COMMON guess +guess : [G] WINDOWS COMMON guess guess.res? ALL += guess diff --git a/icons/Makefile b/icons/Makefile index 934b792..233f767 100644 --- a/icons/Makefile +++ b/icons/Makefile @@ -19,6 +19,7 @@ P16D24 = $(patsubst %,%-16d24.png,$(PUZZLES)) P16D8 = $(patsubst %,%-16d8.png,$(PUZZLES)) P16D4 = $(patsubst %,%-16d4.png,$(PUZZLES)) ICONS = $(patsubst %,%.ico,$(PUZZLES)) +RC = $(patsubst %,%.rc,$(PUZZLES)) BIN = ../ PIC = ./ @@ -26,7 +27,7 @@ PIC = ./ base: $(BASE) web: $(WEB) pngicons: $(P48D24) $(P32D24) $(P16D24) -icons: $(ICONS) +winicons: $(ICONS) $(RC) # Build the base puzzle screenshots from which all the other images # are derived. Some of them involve showing a move animation @@ -108,12 +109,16 @@ $(P16D4): %-16d4.png: %-ibase.png convert -colors 16 -map $(PIC)win16pal.xpm tmp2.png $@ rm -f tmp.png tmp2.png -# And build the actual icons themselves, by feeding all those PNGs -# to my icon builder script. +# Build the actual Windows icons themselves, by feeding all those +# PNGs to my icon builder script. $(ICONS): %.ico: %-48d24.png %-48d8.png %-48d4.png \ %-32d24.png %-32d8.png %-32d4.png \ %-16d24.png %-16d8.png %-16d4.png $(PIC)icon.pl $? > $@ +# Build the .RC files which bind the icons into the applications. +$(RC): %.rc: + echo '200 ICON "$*.ico"' > $@ + clean: - rm -f *.png *.ico + rm -f *.png *.ico *.rc @@ -2,7 +2,7 @@ inertia : [X] GTK COMMON inertia -inertia : [G] WINDOWS COMMON inertia +inertia : [G] WINDOWS COMMON inertia inertia.res? ALL += inertia @@ -4,7 +4,7 @@ LIGHTUP = lightup combi lightup : [X] GTK COMMON LIGHTUP -lightup : [G] WINDOWS COMMON LIGHTUP +lightup : [G] WINDOWS COMMON LIGHTUP lightup.res? lightupsolver : [U] lightup[STANDALONE_SOLVER] combi STANDALONE lightupsolver : [C] lightup[STANDALONE_SOLVER] combi STANDALONE @@ -4,7 +4,7 @@ LOOPY = loopy tree234 dsf loopy : [X] GTK COMMON LOOPY -loopy : [G] WINDOWS COMMON LOOPY +loopy : [G] WINDOWS COMMON LOOPY loopy.res? ALL += LOOPY @@ -4,7 +4,7 @@ MAP = map dsf map : [X] GTK COMMON MAP -map : [G] WINDOWS COMMON MAP +map : [G] WINDOWS COMMON MAP map.res? mapsolver : [U] map[STANDALONE_SOLVER] dsf STANDALONE m.lib mapsolver : [C] map[STANDALONE_SOLVER] dsf STANDALONE @@ -4,7 +4,7 @@ MINES = mines tree234 mines : [X] GTK COMMON MINES -mines : [G] WINDOWS COMMON MINES +mines : [G] WINDOWS COMMON MINES mines.res? mineobfusc : [U] mines[STANDALONE_OBFUSCATOR] tree234 STANDALONE mineobfusc : [C] mines[STANDALONE_OBFUSCATOR] tree234 STANDALONE @@ -130,8 +130,17 @@ readinput: while (1) { $i eq "[X]" or $i eq "[U]" or $i eq "[MX]") and defined $prog) { $type = substr($i,1,(length $i)-2); } else { - push @$listref, $i; - push @allobjs, $i; + if ($i =~ /\?$/) { + # Source files with a trailing question mark are optional: + # the build can proceed fine without them, so we only use + # them if they're present. + $i =~ s/\?$//; + $i = undef unless defined &finddep($i); + } + if (defined $i) { + push @$listref, $i; + push @allobjs, $i; + } } } if ($prog and $type) { @@ -192,23 +201,8 @@ foreach $i (@prognames) { $programs{$i} = [@list]; foreach $jj (@list) { $j = $srcname{$jj}; - # Dependencies for "x" start with "x.c" or "x.m" (depending on - # which one exists). - # Dependencies for "x.res" start with "x.rc". - # Dependencies for "x.rsrc" start with "x.r". - # Both types of file are pushed on the list of files to scan. - # Libraries (.lib) don't have dependencies at all. - if ($j =~ /^(.*)\.res$/) { - $file = "$1.rc"; - $depends{$jj} = [$file]; - push @scanlist, $file; - } elsif ($j =~ /^(.*)\.rsrc$/) { - $file = "$1.r"; - $depends{$jj} = [$file]; - push @scanlist, $file; - } elsif ($j !~ /\./) { - $file = "$j.c"; - $file = "$j.m" unless &findfile($file); + $file = &finddep($j); + if (defined $file) { $depends{$jj} = [$file]; push @scanlist, $file; } @@ -315,6 +309,32 @@ sub findfile { return $findfilecache{$name}; } +sub finddep { + my $j = shift @_; + my $file; + # Find the first dependency of an object. + + # Dependencies for "x" start with "x.c" or "x.m" (depending on + # which one exists). + # Dependencies for "x.res" start with "x.rc". + # Dependencies for "x.rsrc" start with "x.r". + # Both types of file are pushed on the list of files to scan. + # Libraries (.lib) don't have dependencies at all. + if ($j =~ /^(.*)\.res$/) { + $file = "$1.rc"; + } elsif ($j =~ /^(.*)\.rsrc$/) { + $file = "$1.r"; + } elsif ($j !~ /\./) { + $file = "$j.c"; + $file = "$j.m" unless &findfile($file); + } else { + # For everything else, we assume it's its own dependency. + $file = $j; + } + $file = undef unless &findfile($file); + return $file; +} + sub objects { my ($prog, $otmpl, $rtmpl, $ltmpl, $prefix, $dirsep) = @_; my @ret; @@ -655,7 +675,7 @@ if (defined $makefiles{'vc'}) { "\n"; if ($d->{obj} =~ /\.res$/) { print "\trc \$(FWHACK) \$(RCFL) -r -DWIN32 -D_WIN32 ". - "-DWINVER=0x0400 ".$d->{deps}->[0]."\n"; + "-DWINVER=0x0400 -fo".$d->{obj}." ".$d->{deps}->[0]."\n"; } else { $deflist = join "", map { " /D$_" } @{$d->{defs}}; print "\tcl \$(COMPAT) \$(FWHACK) \$(CFLAGS) \$(XFLAGS)$deflist". @@ -6,7 +6,7 @@ net : [X] GTK COMMON NET # The Windows Net shouldn't be called `net.exe' since Windows # already has a reasonably important utility program by that name! -netgame : [G] WINDOWS COMMON NET +netgame : [G] WINDOWS COMMON NET net.res? ALL += NET @@ -4,7 +4,7 @@ NETSLIDE = netslide tree234 netslide : [X] GTK COMMON NETSLIDE -netslide : [G] WINDOWS COMMON NETSLIDE +netslide : [G] WINDOWS COMMON NETSLIDE netslide.res? ALL += NETSLIDE @@ -2,7 +2,7 @@ pattern : [X] GTK COMMON pattern -pattern : [G] WINDOWS COMMON pattern +pattern : [G] WINDOWS COMMON pattern pattern.res? patternsolver : [U] pattern[STANDALONE_SOLVER] STANDALONE patternsolver : [C] pattern[STANDALONE_SOLVER] STANDALONE @@ -4,7 +4,7 @@ PEGS = pegs tree234 pegs : [X] GTK COMMON PEGS -pegs : [G] WINDOWS COMMON PEGS +pegs : [G] WINDOWS COMMON PEGS pegs.res? ALL += PEGS @@ -2,7 +2,7 @@ rect : [X] GTK COMMON rect -rect : [G] WINDOWS COMMON rect +rect : [G] WINDOWS COMMON rect rect.res? ALL += rect @@ -2,7 +2,7 @@ samegame : [X] GTK COMMON samegame -samegame : [G] WINDOWS COMMON samegame +samegame : [G] WINDOWS COMMON samegame samegame.res? ALL += samegame @@ -2,7 +2,7 @@ sixteen : [X] GTK COMMON sixteen -sixteen : [G] WINDOWS COMMON sixteen +sixteen : [G] WINDOWS COMMON sixteen sixteen.res? ALL += sixteen @@ -4,7 +4,7 @@ SLANT = slant dsf slant : [X] GTK COMMON SLANT -slant : [G] WINDOWS COMMON SLANT +slant : [G] WINDOWS COMMON SLANT slant.res? slantsolver : [U] slant[STANDALONE_SOLVER] dsf STANDALONE slantsolver : [C] slant[STANDALONE_SOLVER] dsf STANDALONE @@ -2,7 +2,7 @@ solo : [X] GTK COMMON solo -solo : [G] WINDOWS COMMON solo +solo : [G] WINDOWS COMMON solo solo.res? solosolver : [U] solo[STANDALONE_SOLVER] STANDALONE solosolver : [C] solo[STANDALONE_SOLVER] STANDALONE @@ -4,7 +4,7 @@ TENTS = tents maxflow tents : [X] GTK COMMON TENTS -tents : [G] WINDOWS COMMON TENTS +tents : [G] WINDOWS COMMON TENTS tents.res? ALL += TENTS @@ -2,7 +2,7 @@ twiddle : [X] GTK COMMON twiddle -twiddle : [G] WINDOWS COMMON twiddle +twiddle : [G] WINDOWS COMMON twiddle twiddle.res? ALL += twiddle @@ -4,7 +4,7 @@ UNTANGLE = untangle tree234 untangle : [X] GTK COMMON UNTANGLE -untangle : [G] WINDOWS COMMON UNTANGLE +untangle : [G] WINDOWS COMMON UNTANGLE untangle.res? ALL += UNTANGLE @@ -2441,7 +2441,9 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = inst; - wndclass.hIcon = LoadIcon(inst, IDI_APPLICATION); + wndclass.hIcon = LoadIcon(inst, MAKEINTRESOURCE(200)); + if (!wndclass.hIcon) /* in case resource file is absent */ + wndclass.hIcon = LoadIcon(inst, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = NULL; wndclass.lpszMenuName = NULL; |