diff --git a/Recipe b/Recipe index 36143a9..fa1a78f 100644 --- a/Recipe +++ b/Recipe @@ -40,6 +40,16 @@ pattern : [G] WINDOWS COMMON pattern # Mac OS X unified application containing all the puzzles. Puzzles : [MX] osx osx.icns osx-info.plist COMMON ALL +# For OS X, we must create the online help and include it in the +# application bundle.) +!begin osx +Puzzles_extra = Puzzles.app/Contents/Resources/Help/index.html +Puzzles.app/Contents/Resources/Help/index.html: \ + Puzzles.app/Contents/Resources/Help puzzles.but + halibut --html=$@ puzzles.but +Puzzles.app/Contents/Resources/Help: Puzzles.app/Contents/Resources + mkdir -p Puzzles.app/Contents/Resources/Help +!end # The `nullgame' source file is a largely blank one, which contains # all the correct function definitions to compile and link, but diff --git a/mkfiles.pl b/mkfiles.pl index 8af1939..aa257ed 100755 --- a/mkfiles.pl +++ b/mkfiles.pl @@ -1131,6 +1131,9 @@ if (defined $makefiles{'osx'}) { &splitline("CFLAGS = -O2 -Wall -Werror -g -DMAC_OS_X " . (join " ", map {"-I$dirpfx$_"} @srcdirs))."\n". "LDFLAGS = -framework Cocoa\n". + &splitline("all:" . join "", map { " $_" } &progrealnames("MX")) . + "\n" . + $makefile_extra{'osx'} . "\n". ".SUFFIXES: .o .c .m\n". "\n". @@ -1139,7 +1142,6 @@ if (defined $makefiles{'osx'}) { ".m.o:\n". "\t\$(CC) -x objective-c \$(COMPAT) \$(FWHACK) \$(XFLAGS) \$(CFLAGS) -c \$<\n". "\n"; - print &splitline("all:" . join "", map { " $_" } &progrealnames("MX")); print "\n\n"; foreach $p (&prognames("MX")) { ($prog, $type) = split ",", $p; @@ -1159,6 +1161,7 @@ if (defined $makefiles{'osx'}) { print "${prog}.app/Contents/Info.plist: ${prog}.app/Contents/Resources $infoplist\n\tcp $infoplist \$\@\n"; $targets .= " ${prog}.app/Contents/Info.plist"; } + $targets .= " \$(${prog}_extra)"; print &splitline("${prog}: $targets", 69) . "\n\n"; print &splitline("${prog}.app/Contents/MacOS/$prog: ". "${prog}.app/Contents/MacOS " . $objstr), "\n"; @@ -1170,8 +1173,6 @@ if (defined $makefiles{'osx'}) { print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})), "\n"; } - print "\n"; - print $makefile_extra{'osx'}; print "\nclean:\n". "\trm -f *.o\n". "\trm -rf *.app\n"; diff --git a/osx-info.plist b/osx-info.plist index 54e8af3..afe6f58 100644 --- a/osx-info.plist +++ b/osx-info.plist @@ -4,5 +4,9 @@ CFBundleIconFile Puzzles.icns + CFBundleHelpBookFolder + Help + CFBundleHelpBookName + Puzzles Help diff --git a/osx.m b/osx.m index d5fab20..245672a 100644 --- a/osx.m +++ b/osx.m @@ -1,12 +1,15 @@ /* * Mac OS X / Cocoa front end to puzzles. * - * Actually unfinished things left to do: - * - * - Find out how to do help, and do some. We have a help file; at - * _worst_ this should involve a new Halibut back end, but I - * think help is HTML round here anyway so perhaps we can work - * with what we already have. + * Still to do: + * + * - Improve the help. For a start I probably ought to split it + * into pieces (which means Halibut needs to acquire a mechanism + * of putting something in the head section of _only one_ HTML + * file); then I'd also like to be able to call up context help + * for a specific game at a time. Also I just idly wonder + * whether changing font might be nice, to match up to Apple + * norms. * * Mac interface issues that possibly could be done better: * @@ -1113,12 +1116,12 @@ void status_bar(frontend *fe, char *text) @interface AppController : NSObject { } -- (IBAction)newGame:(id)sender; +- (void)newGame:(id)sender; @end @implementation AppController -- (IBAction)newGame:(id)sender +- (void)newGame:(id)sender { const game *g = [sender getPayload]; id win; @@ -1209,6 +1212,10 @@ int main(int argc, char **argv) [NSApp setWindowsMenu: menu]; item = newitem(menu, "Minimise Window", "m", NULL, @selector(performMiniaturize:)); + menu = newsubmenu([NSApp mainMenu], "Help"); + typemenu = menu; + item = newitem(menu, "Puzzles Help", "", NSApp, @selector(showHelp:)); + [NSApp run]; [pool release]; } diff --git a/puzzles.but b/puzzles.but index de0bac3..305340a 100644 --- a/puzzles.but +++ b/puzzles.but @@ -5,11 +5,16 @@ \cfg{text-filename}{puzzles.txt} -\cfg{xhtml-contents-filename}{index.html} -\cfg{xhtml-leaf-level}{1} -\cfg{xhtml-contents-depth-0}{1} -\cfg{xhtml-contents-depth-1}{2} -\cfg{xhtml-leaf-contains-contents}{true} +\# +\cfg{html-contents-filename}{index.html} +\cfg{html-leaf-level}{1} +\cfg{html-contents-depth-0}{1} +\cfg{html-contents-depth-1}{2} +\cfg{html-leaf-contains-contents}{true} + +\cfg{html-single-filename}{index.html} +\cfg{html-head-end}{} +\cfg{html-leaf-level}{0} \cfg{info-filename}{puzzles.info}