From 2962e623d0fa83384a63657643b6909c6de1c597 Mon Sep 17 00:00:00 2001
From: kmhugo <kmhugo>
Date: Wed, 20 Mar 2002 06:33:45 +0000
Subject: [PATCH] Mac port update

* Update Mac port to new options system.
* Update Mac-specific documentation.
* Remove hardcoded version strings.
* Remove obsolete popup_dialog.
---
 include/macpopup.h |   7 -
 src/options.c      |  10 +-
 sys/mac/Files.r    |  73 ++++--
 sys/mac/MacHelp    |  23 +-
 sys/mac/NHDeflts   | 106 ++++++--
 sys/mac/News       |   4 +-
 sys/mac/README     |   5 +-
 sys/mac/mactopl.c  |   7 +-
 sys/mac/macwin.c   |  12 +-
 sys/mac/mgetline.c |  11 +-
 sys/mac/mmodal.c   | 638 ---------------------------------------------
 sys/mac/mttymain.c |   3 +-
 12 files changed, 172 insertions(+), 727 deletions(-)

diff --git a/include/macpopup.h b/include/macpopup.h
index 16e860afd..7565fb44a 100644
--- a/include/macpopup.h
+++ b/include/macpopup.h
@@ -12,11 +12,4 @@ extern char queued_resp(char *resp);
 extern char topl_yn_function(const char *query, const char *resp, char def);
 extern int get_line_from_key_queue(char *bufp);
 
-#define ENABLE_MAC_POPUP 0
-#if ENABLE_MAC_POPUP
-
-extern char popup_yn_function(const char *query, const char *resp, char def);
-extern void popup_getlin (const char *query, char *bufp);
-
-#endif /* ENABLE_MAC_POPUP */
 #endif /* MACPOPUP_H */
diff --git a/src/options.c b/src/options.c
index c99752419..a63de72d5 100644
--- a/src/options.c
+++ b/src/options.c
@@ -68,7 +68,7 @@ static struct Bool_Opt
 	{"color",         &iflags.wc_color, FALSE, SET_IN_GAME},	/*WC*/
 # endif
 	{"confirm",&flags.confirm, TRUE, SET_IN_GAME},
-#ifdef TERMLIB
+#if defined(TERMLIB) && !defined(MAC_GRAPHICS_ENV)
 	{"DECgraphics", &iflags.DECgraphics, FALSE, SET_IN_GAME},
 #else
 	{"DECgraphics", (boolean *)0, FALSE, SET_IN_FILE},
@@ -98,8 +98,12 @@ static struct Bool_Opt
 #else
 	{"IBMgraphics", (boolean *)0, FALSE, SET_IN_FILE},
 #endif
+#ifndef MAC
 	{"ignintr", &flags.ignintr, FALSE, SET_IN_GAME},
-	{"large_font", &iflags.wc_large_font, FALSE, SET_IN_GAME},	/*WC*/
+#else
+	{"ignintr", (boolean *)0, FALSE, SET_IN_FILE},
+#endif
+	{"large_font", &iflags.wc_large_font, FALSE, SET_IN_FILE},	/*WC*/
 	{"legacy", &flags.legacy, TRUE, DISP_IN_GAME},
 	{"lit_corridor", &flags.lit_corridor, FALSE, SET_IN_GAME},
 #ifdef MAC_GRAPHICS_ENV
@@ -3014,7 +3018,7 @@ struct wc_Opt wc_options[] = {
 	{"color", WC_COLOR},
 	{"eight_bit_tty", WC_EIGHT_BIT_IN},
 	{"hilite_pet", WC_HILITE_PET},
-	{"large_font", WC_LARGE_FONT},
+	{"large_font", WC_LARGE_FONT},	/* now obsolete */
 	{"popup_dialog", WC_POPUP_DIALOG},
 	{"preload_tiles", WC_PRELOAD_TILES},
 	{"tiled_map", WC_TILED_MAP},
diff --git a/sys/mac/Files.r b/sys/mac/Files.r
index fa7837f5b..b38132862 100644
--- a/sys/mac/Files.r
+++ b/sys/mac/Files.r
@@ -1,3 +1,19 @@
+#include <MacTypes.r>
+#include "date.h"
+#include "patchlevel.h"
+
+resource 'vers' (1, purgeable) {
+	VERSION_MAJOR, (VERSION_MINOR<<4) | PATCHLEVEL, final, EDITLEVEL, verUS,
+	VERSION_STRING,
+	VERSION_STRING
+};
+
+resource 'vers' (2, purgeable) {
+	VERSION_MAJOR, (VERSION_MINOR<<4) | PATCHLEVEL, final, EDITLEVEL, verUS,
+	VERSION_STRING,
+	"devteam@nethack.org"
+};
+
 read 'File' (1000,"cmdhelp") ":dat:cmdhelp";
 read 'File' (1001,"help") ":dat:help";
 read 'File' (1002,"hh") ":dat:hh";
@@ -30,31 +46,38 @@ read 'File' (1028,"medusa-2.lev") ":lib:medusa-2.lev";
 read 'File' (1029,"minefill.lev") ":lib:minefill.lev";
 read 'File' (1030,"minend-1.lev") ":lib:minend-1.lev";
 read 'File' (1031,"minend-2.lev") ":lib:minend-2.lev";
-read 'File' (1032,"minetn-1.lev") ":lib:minetn-1.lev";
-read 'File' (1033,"minetn-2.lev") ":lib:minetn-2.lev";
-read 'File' (1034,"options") ":lib:options";
-read 'File' (1035,"oracle.lev") ":lib:oracle.lev";
-read 'File' (1036,"oracles") ":lib:oracles";
-read 'File' (1037,"orcus.lev") ":lib:orcus.lev";
-read 'File' (1038,"quest.dat") ":lib:quest.dat";
-read 'File' (1039,"rumors") ":lib:rumors";
-read 'File' (1040,"sanctum.lev") ":lib:sanctum.lev";
-read 'File' (1041,"soko1-1.lev") ":lib:soko1-1.lev";
-read 'File' (1042,"soko1-2.lev") ":lib:soko1-2.lev";
-read 'File' (1043,"soko2-1.lev") ":lib:soko2-1.lev";
-read 'File' (1044,"soko2-2.lev") ":lib:soko2-2.lev";
-read 'File' (1045,"soko3-1.lev") ":lib:soko3-1.lev";
-read 'File' (1046,"soko3-2.lev") ":lib:soko3-2.lev";
-read 'File' (1047,"soko4-1.lev") ":lib:soko4-1.lev";
-read 'File' (1048,"soko4-2.lev") ":lib:soko4-2.lev";
-read 'File' (1049,"tower1.lev") ":lib:tower1.lev";
-read 'File' (1050,"tower2.lev") ":lib:tower2.lev";
-read 'File' (1051,"tower3.lev") ":lib:tower3.lev";
-read 'File' (1052,"valley.lev") ":lib:valley.lev";
-read 'File' (1053,"water.lev") ":lib:water.lev";
-read 'File' (1054,"wizard1.lev") ":lib:wizard1.lev";
-read 'File' (1055,"wizard2.lev") ":lib:wizard2.lev";
-read 'File' (1056,"wizard3.lev") ":lib:wizard3.lev";
+read 'File' (1032,"minend-3.lev") ":lib:minend-3.lev";
+read 'File' (1033,"minend-4.lev") ":lib:minend-4.lev";
+read 'File' (1034,"minetn-1.lev") ":lib:minetn-1.lev";
+read 'File' (1035,"minetn-2.lev") ":lib:minetn-2.lev";
+read 'File' (1036,"minetn-3.lev") ":lib:minetn-3.lev";
+read 'File' (1037,"minetn-4.lev") ":lib:minetn-4.lev";
+read 'File' (1038,"minetn-5.lev") ":lib:minetn-5.lev";
+read 'File' (1039,"minetn-6.lev") ":lib:minetn-6.lev";
+read 'File' (1040,"minetn-7.lev") ":lib:minetn-7.lev";
+read 'File' (1041,"options") ":lib:options";
+read 'File' (1042,"oracle.lev") ":lib:oracle.lev";
+read 'File' (1043,"oracles") ":lib:oracles";
+read 'File' (1044,"orcus.lev") ":lib:orcus.lev";
+read 'File' (1045,"quest.dat") ":lib:quest.dat";
+read 'File' (1046,"rumors") ":lib:rumors";
+read 'File' (1047,"sanctum.lev") ":lib:sanctum.lev";
+read 'File' (1048,"soko1-1.lev") ":lib:soko1-1.lev";
+read 'File' (1049,"soko1-2.lev") ":lib:soko1-2.lev";
+read 'File' (1050,"soko2-1.lev") ":lib:soko2-1.lev";
+read 'File' (1051,"soko2-2.lev") ":lib:soko2-2.lev";
+read 'File' (1052,"soko3-1.lev") ":lib:soko3-1.lev";
+read 'File' (1053,"soko3-2.lev") ":lib:soko3-2.lev";
+read 'File' (1054,"soko4-1.lev") ":lib:soko4-1.lev";
+read 'File' (1055,"soko4-2.lev") ":lib:soko4-2.lev";
+read 'File' (1056,"tower1.lev") ":lib:tower1.lev";
+read 'File' (1057,"tower2.lev") ":lib:tower2.lev";
+read 'File' (1058,"tower3.lev") ":lib:tower3.lev";
+read 'File' (1059,"valley.lev") ":lib:valley.lev";
+read 'File' (1060,"water.lev") ":lib:water.lev";
+read 'File' (1061,"wizard1.lev") ":lib:wizard1.lev";
+read 'File' (1062,"wizard2.lev") ":lib:wizard2.lev";
+read 'File' (1063,"wizard3.lev") ":lib:wizard3.lev";
 read 'File' (1100,"Arc-fila.lev") ":lib:Arc-fila.lev";
 read 'File' (1101,"Arc-filb.lev") ":lib:Arc-filb.lev";
 read 'File' (1102,"Arc-goal.lev") ":lib:Arc-goal.lev";
diff --git a/sys/mac/MacHelp b/sys/mac/MacHelp
index e8b1aa3b1..3197aed33 100644
--- a/sys/mac/MacHelp
+++ b/sys/mac/MacHelp
@@ -1,11 +1,11 @@
-            Macintosh-specific help file for NetHack 3.3
+            Macintosh-specific help file for NetHack 3.4
 
 The following are options, features, or concerns specific to the
-Macintosh port of NetHack 3.3.  Bug reports, suggestions, comments,
+MacOS Classic port of NetHack.  Bug reports, suggestions, comments,
 and so on, should be addressed to:
 
     To: nethack-bugs@nethack.org
-    Subject: Mac NetHack 3.3
+    Subject: Mac NetHack 3.4
 
 or you can use our on-line bug reporting form at
 
@@ -17,10 +17,10 @@ and so on).
 
 
 === Configuration of a playground
-    NetHack 3.3 is packaged in a Dungeon Folder which includes:
+    NetHack is packaged in a Dungeon Folder which includes:
         NetHack - the application file itself.
         NetHack Defaults - text file for default option settings.
-        license - licensing terms for nethack.
+        License - licensing terms for nethack.
         Guidebook - description of the game in long format.
         Recover - the application to restore save files from crashed games.
     Previous versions had a large number of data files in the Dungeon
@@ -50,6 +50,7 @@ and so on).
     and answer the "Who are you?" dialog with the player name of
     the saved game in the Dungeon Folder.
 
+
 === Windows
     The Dungeon Map and Message windows are the essential windows used
     during window-mode play.  During tty-mode play there is only one
@@ -68,23 +69,13 @@ and so on).
     window positions are saved in a file labelled "NetHack Windows"
     in the appropriate preferences folder.
 
+
 === Default options
     The following options are specific to the Macintosh port:
     background:  - black or white
     MACgraphics  - use enhanced dungeon map symbols [TRUE]
-    large_font   - use 12 point font instead of 9 point font [FALSE]
-    popup_dialog - use real dialogs for question prompts [FALSE]
     page_wait    - display  --MORE--  after messages [TRUE]
-    use_stone:#  - use a background pattern for the dungeon.
-
-    large_font is currently a pre-game option and has no effect
-    after the Dungeon Map window is created.
 
-	use_stone is also a pre-game option.  The number parameter
-    specifies which pattern to use.  If the number is 0 or
-    greater than the number of available patterns, it has no
-    effect.
-        
     Default options may be set by editing the NetHack Defaults text
     file (using SimpleText or your favorite editor).  The following
     notation is used:
diff --git a/sys/mac/NHDeflts b/sys/mac/NHDeflts
index be8dd2aa4..12a9c3d9f 100644
--- a/sys/mac/NHDeflts
+++ b/sys/mac/NHDeflts
@@ -1,23 +1,35 @@
-# SCCS Id: @(#)NetHack Defaults	3.3	99/11/20
-# Copyright (c) 1999 by Dean Luick, Mark Modrall, and Kevin Hugo
+# SCCS Id: @(#)NetHack Defaults	3.4	2002/03/15
+# Copyright (c) 2002 by Dean Luick, Mark Modrall, and Kevin Hugo
 # NetHack may be freely redistributed.  See license for details.
 #
 # Default settings for the Macintosh port of NetHack.
-# Comment lines begin with a `#' character.
+# Lines beginning with a `#' character are "comments" and are
+# ignored all the way to the end of the line.  Using this
+# method, some of the lines below have been disabled so you
+# can see an example without having those options actually
+# set.  Remove the `#' character to "uncomment" the line and
+# allow those options to take effect.
 
 
 ### Display ###
 # Uncomment for the traditional single-window tty interface
 #OPTIONS=win:tty
 
-# Font size and style (use HackFont or NewHackFont)
-OPTIONS=!large,fontmap:NewHackFont
+# Boulder symbol
+#OPTIONS=boulder:0
 
-# Color and background
-OPTIONS=color,background:white,use_stone:1
+# Color
+OPTIONS=color
 
-# Obsolete way to obtain reverse video; use background:black instead
-#OPTIONS=palette:000/c22/2c2/ca0/22c/a2a/2aa/ccc/999/f00/0f0/dd0/00f/d0d/0dd/fff/999/444/622/62c/-222
+# Fonts
+#OPTIONS=font_map:NewHackFont,font_size_map:9
+#OPTIONS=font_menu:geneva,font_size_menu:9
+#OPTIONS=font_message:PSHackFont,font_size_message:9
+#OPTIONS=font_status:monaco,font_size_status:9
+#OPTIONS=font_text:geneva,font_size_text:9
+
+# Don't make dark corridors look like lit corridors
+OPTIONS=!lit_corridor
 
 # Enable sound and beeps
 OPTIONS=sound,!silent
@@ -30,33 +42,48 @@ OPTIONS=sound,!silent
 # Save game state periodically in case of crashes (recommended)
 OPTIONS=checkpoint
 
+# How to prompt for things after death
+#OPTIONS=disclose:+i na -v yg nc
+
 # Show tombstone and top scores at death
 OPTIONS=tombstone,scores:10t/3a/o
 
+# Show top ten list in its own window
+#OPTIONS=toptenwin
+
 
 ### User input and feedback ###
 # Choose between menus or text prompts
 # (traditional, combination, partial, or full)
 OPTIONS=menustyle:full
 
-# Display a little more information with some commands
-OPTIONS=verbose
+# Extended (`#') commands by menu
+#OPTIONS=extmenu
+
+# Increase the number of message lines remembered
+#OPTIONS=msghistory:60
+
+# Enable the number pad keys
+OPTIONS=number_pad
 
 # Pause for --more-- and make it boldface
 OPTIONS=page_wait,standout
 
+# Ask for confirmation with the #pray command
+OPTIONS=prayconfirm
+
 # Allow spacebar as rest command
 #OPTIONS=rest_on_space
 
-# Enable the number pad keys
-OPTIONS=number_pad
-
 # Display experience, score, and time on status line
 OPTIONS=showexp,showscore,time
 
-# Use popup windows for yes/no questions
-# This is likely to go away in future releases
-#OPTIONS=popup_dialog
+# Turn off animations
+#OPTIONS=!sparkle
+
+# Display a little more information with some commands
+#OPTIONS=suppress_alert:3.3.0
+OPTIONS=verbose
 
 
 ### Character ###
@@ -76,18 +103,59 @@ OPTIONS=showexp,showscore,time
 
 
 ### Inventory ###
+# Automatically dig if wielding a pick
+#OPTIONS=autodig
+
 # Disable autopickup (toggle it with the `@' command)
-#OPTIONS=!autopickup
+#OPTIONS=!autopickup,pickup_types:$*
+
+# Automatically fill the quiver
+#OPTIONS=autoquiver
 
 # Don't use fixed inventory letters
 OPTIONS=!fixinv,perm_invent,sortpack
 
+# What you want to call slime molds
+#OPTIONS=fruit:grape
+
+# Desired inventory display order
+#OPTIONS=packorder:)[(
+
+# How much you're willing to carry without confirmation
+#OPTIONS=pickup_burden:B
+
+# Put weapon in secondary slot when wielding another
+#OPTIONS=pushweapon
+
 
 ### Pets ###
 # What to call your starting pet, and its type
-OPTIONS=dogname:Quinn,catname:Vladimir,horsename:Silver,pettype:dog
+#OPTIONS=dogname:Quinn,catname:Vladimir,horsename:Silver,pettype:dog
 
 # Don't intentionally attack your pets
 OPTIONS=confirm,!hilite_pet,safe_pet
 
+
+### Unused options ###
+
+# Now obsolete
+#
+# background, large_font, popup_dialog, use_stone
+
+# Obsolete way to obtain reverse video; use at your own risk
+#OPTIONS=palette:000/c22/2c2/ca0/22c/a2a/2aa/ccc/999/f00/0f0/dd0/00f/d0d/0dd/fff/999/444/622/62c/-222
+
+# Options used in tty window mode, but not mac window mode
+#
+# menu_..., msg_window, timed_delay, use_inverse, vary_msgcount
+
+# Options used by other ports but not Macintosh:
+#
+# align_message, align_status, ascii_map, BIOS, checkspace,
+# decgraphics, eight_bit_tty, ibmgraphics, ignintr, mail,
+# map_mode, null, player_selection, preload_tiles, rawio,
+# splash_screen, tiled_map, tile_..., videocolors, videoshades,
+# windowcolors
+
+
 # End-of-file
diff --git a/sys/mac/News b/sys/mac/News
index ec2917cd9..ddbc48dbc 100644
--- a/sys/mac/News
+++ b/sys/mac/News
@@ -1,4 +1,6 @@
-Welcome to NetHack 3.3 for the Macintosh
+Welcome to NetHack 3.4 for MacOS 7.0 - 9.x
+
+Unfortunately, the 68k version is no longer supported.
 
 This game is brought to you by Dean Luick, Kevin Hugo, and Mark Modrall.
 
diff --git a/sys/mac/README b/sys/mac/README
index 34af52ebc..addc762ab 100644
--- a/sys/mac/README
+++ b/sys/mac/README
@@ -2,7 +2,10 @@ Jan 2002
 
 The MPW compilers are now supported again.
 
-Note that the graphical MacOSX variant uses the Qt windowport and the UNIX
+Support for 68k has been discontinued due to a lack of a debugging
+system for 68k binaries.
+
+Note that the graphical MacOS X variant uses the Qt windowport and the UNIX
 build system.
 
 
diff --git a/sys/mac/mactopl.c b/sys/mac/mactopl.c
index 758a9dd2a..b9979e3a7 100644
--- a/sys/mac/mactopl.c
+++ b/sys/mac/mactopl.c
@@ -59,12 +59,7 @@ char def;
  *   If resp is NULL, any single character is accepted and returned.
  */
 {
-#if ENABLE_MAC_POPUP
-	if (iflags.popup_dialog)
-		return popup_yn_function(query, resp, def);
-	else
-#endif
 		return topl_yn_function(query, resp, def);
 }
 
-/*topl.c*/
+/* mactopl.c */
diff --git a/sys/mac/macwin.c b/sys/mac/macwin.c
index 5597e02fd..76983efd8 100644
--- a/sys/mac/macwin.c
+++ b/sys/mac/macwin.c
@@ -626,9 +626,12 @@ got1 :
 
 	if (kind == NHW_MESSAGE) {
 		aWin->font_number = win_fonts [NHW_MESSAGE];
-		aWin->font_size = iflags.large_font ? 12 : 9;
+		aWin->font_size = iflags.wc_fontsiz_message? iflags.wc_fontsiz_message :
+			iflags.large_font ? 12 : 9;
 		if (!top_line) {
 			const Rect out_of_scr = {10000, 10000, 10100, 10100};
+			TextFont(aWin->font_number);
+			TextSize(aWin->font_size);
 			TextFace(bold);
 			top_line = TENew(&out_of_scr, &out_of_scr);
 			TEActivate(top_line);
@@ -636,7 +639,7 @@ got1 :
 		}
 	} else {
 		aWin->font_number = win_fonts [NHW_TEXT];
-		aWin->font_size = 9;
+		aWin->font_size = iflags.wc_fontsiz_text ? iflags.wc_fontsiz_text : 9;
 	}
 
 	TextFont (aWin->font_number); 
@@ -2488,7 +2491,10 @@ try_key_queue (char *bufp) {
 /* Interface definition, for windows.c */
 struct window_procs mac_procs = {
 	"mac",
-	WC_ASCII_MAP|WC_COLOR|WC_LARGE_FONT,
+	WC_COLOR | WC_HILITE_PET |
+	WC_LARGE_FONT |	/*  obsolete */
+	WC_FONT_MAP | WC_FONT_MENU | WC_FONT_MESSAGE | WC_FONT_STATUS | WC_FONT_TEXT |
+	WC_FONTSIZ_MAP | WC_FONTSIZ_MENU | WC_FONTSIZ_MESSAGE | WC_FONTSIZ_STATUS | WC_FONTSIZ_TEXT,
 	mac_init_nhwindows,
 	mac_unimplemented,	/* see macmenu.c:mac_askname() for player selection */
 	mac_askname,
diff --git a/sys/mac/mgetline.c b/sys/mac/mgetline.c
index d9b72c0e7..06c9b5c5b 100644
--- a/sys/mac/mgetline.c
+++ b/sys/mac/mgetline.c
@@ -8,6 +8,8 @@
 #include "macpopup.h"
 #include "func_tab.h"
 
+extern int NDECL(extcmd_via_menu);	/* cmd.c */
+
 typedef Boolean FDECL ((* key_func), (unsigned char));
 
 int
@@ -48,13 +50,7 @@ topl_getlin(const char *query, char *bufp, Boolean ext) {
  */
 void
 mac_getlin(const char *query, char *bufp) {
-
-#if ENABLE_MAC_POPUP
-	if (iflags.popup_dialog)
-		popup_getlin (query, bufp);
-	else
-#endif
-		topl_getlin (query, bufp, false);
+	topl_getlin (query, bufp, false);
 }
 
 
@@ -67,6 +63,7 @@ mac_get_ext_cmd() {
 	char bufp[BUFSZ];
 	int i;
 
+	if (iflags.extmenu) return extcmd_via_menu();
 	topl_getlin("# ", bufp, true);
 	for (i = 0; extcmdlist[i].ef_txt != (char *)0; i++)
 		if (!strcmp(bufp, extcmdlist[i].ef_txt)) break;
diff --git a/sys/mac/mmodal.c b/sys/mac/mmodal.c
index dfb575403..35e00e302 100644
--- a/sys/mac/mmodal.c
+++ b/sys/mac/mmodal.c
@@ -3,10 +3,6 @@
 /* NetHack may be freely redistributed.  See license for details. */
 
 #include <Dialogs.h>
-#if ENABLE_MAC_POPUP
-#include "hack.h"
-#include "mactty.h"
-#endif
 #include "macpopup.h"
 #include <ControlDefinitions.h>
 
@@ -27,637 +23,3 @@ FlashButton (WindowPtr wind, short item) {
 }
 
 
-#if ENABLE_MAC_POPUP
-static void mv_handle_click (EventRecord *theEvent);
-
-#define MAX_MV_DIALOGS 20
-static int old_dialog_count = 0;
-static struct {
-	short	  id;
-	Boolean   init_visible;
-	DialogPtr dialog;
-} old_dialog[MAX_MV_DIALOGS];
-
-
-static short frame_corner;
-static pascal void FrameItem(DialogPtr dlog, short item);
-static UserItemUPP FrameItemUPP = NULL;
-
-static pascal void
-FrameItem (DialogPtr dlog, short item) {
-	short k;
-	Handle h;
-	Rect r;
-
-	GetDialogItem (dlog, item, &k, &h, &r);
-	PenSize (3, 3);
-	FrameRoundRect (&r, frame_corner, frame_corner);
-	PenNormal ();
-}
-
-
-static void
-SetFrameItem (DialogPtr dlog, short frame, short item) {
-	Rect r, r2;
-	short kind;
-	Handle h;
-
-	if (!FrameItemUPP)	/* initialize handler routine */
-		FrameItemUPP = NewUserItemProc(FrameItem);
-		
-	GetDialogItem (dlog, item, &kind, &h, &r);
-	InsetRect (&r, -4, -4);
-	r2 = r;
-	GetDialogItem (dlog, frame, &kind, &h, &r);
-	SetDialogItem (dlog, frame, kind, (Handle) FrameItemUPP, &r2);
-	frame_corner = 16;
-}
-
-
-/* Instead of calling GetNewDialog everytime, just call
-   SelectWindow/ShowWindow for the old dialog to remember its location.
-*/
-/*
- *	Unfortunately, this does not work, as it doesn't handle old text
- *	in edit text boxes, and not ParamText parameters either.
- *
- */
-static DialogPtr
-mv_get_new_dialog(short dialogID) {
-	DialogPtr dialog;
-	int d_idx = old_dialog_count;
-	Rect oldRect;
-	Boolean hadOld = 0;
-
-	old_dialog[0].id = dialogID;
-	while (old_dialog[d_idx].id != dialogID)
-		--d_idx;
-
-/*
- *	This routine modified so that the old dialog is
- *	disposed, and the new one read in after we remember
- *	the old dialog's position.
- *
- *	This takes care of strange default strings and ParamTexts
- *
- */
-
-	if (d_idx) {
-		dialog = old_dialog [d_idx] . dialog;
-		oldRect = dialog->portBits . bounds;
-		DisposeDialog (dialog);
-		old_dialog [d_idx] . dialog = (DialogPtr) 0;
-		hadOld = 1;
-
-	} else {
-		d_idx = ++ old_dialog_count;
-	}
-
-	dialog = GetNewDialog(dialogID, nil, (WindowPtr)-1);
-	if (dialog) {
-		if (hadOld) {
-			MoveWindow (dialog, - oldRect . left, - oldRect . top, FALSE);
-		}
-		old_dialog[d_idx].id = dialogID;
-		old_dialog[d_idx].init_visible
-			= ((WindowPeek)dialog)->visible;
-		old_dialog[d_idx].dialog = dialog;
-	}
-	return dialog;
-}
-
-/* Instead of actually closing the dialog, just hide it so its location
-   is remembered. */
-static void mv_close_dialog(DialogPtr dialog) {
-	HideWindow(dialog);
-}
-
-/* This routine is stolen/borrowed from HandleClick (macwin.c).  See the
-   comments in mv_modal_dialog for more information. */
-static void
-mv_handle_click (EventRecord *theEvent) {
-	int code;
-	WindowPtr theWindow;
-	Rect r = (*GetGrayRgn ())->rgnBBox;
-
-	InsetRect (&r, 4, 4);
-	InitCursor ();
-
-	code = FindWindow (theEvent->where, &theWindow);
-
-	switch (code) {
-	case inContent :
-		if (theWindow != FrontWindow ()) {
-			nhbell ();
-		}
-		break;
-	case inDrag :
-		SetCursor(&qd.arrow);
-		DragWindow (theWindow, theEvent->where, &r);
-		SaveWindowPos (theWindow);
-		break;
-	default :
-		HandleEvent (theEvent);
-	}
-}
-
-static void
-mv_modal_dialog(ModalFilterProcPtr filterProc, short *itemHit) {
-	GrafPtr org_port;
-	GetPort(&org_port);
-
-	for (;;) {
-		DialogPtr dialog = FrontWindow();
-		EventRecord evt;
-
-		WaitNextEvent(everyEvent, &evt, GetCaretTime(), (RgnHandle) nil);
-
-		if (evt.what == keyDown)
-			if (evt.modifiers &cmdKey) {
-				if ((evt.message & charCodeMask) == '.') {
-					/* 0x351b is the key code and character code of the esc key. */
-					evt.message = 0x351b;
-					evt.modifiers &= ~cmdKey;
-				}
-			} else
-				trans_num_keys(&evt);
-
-		if (filterProc) {
-			if ((*filterProc)(dialog, &evt, itemHit))
-				break;
-		} else if (evt.what == keyDown) {
-			char ch = evt.message & charCodeMask;
-			if (ch == CHAR_CR || ch == CHAR_ENTER) {
-				*itemHit = ok;
-				FlashButton(dialog, ok);
-				break;
-			}
-		}
-
-		if (IsDialogEvent(&evt)) {
-			DialogPtr dont_care;
-			if (DialogSelect(&evt, &dont_care, itemHit))
-				break;
-
-		/* The following part is problemmatic: (1) Calling HandleEvent
-		   here may cause some re-entrance problem (seems ok, but I am
-		   not sure). (2) It is ugly to treat mouseDown events as a
-		   special case.  If we can just say "else HandleEvent(&evt);"
-		   here it will be better. */
-		} else if (evt.what == mouseDown)
-				mv_handle_click(&evt);
-			else
-				HandleEvent(&evt);
-
-		SetPort(org_port);
-	}
-}
-
-/*********************************************************************************
- * mactopl routines using dialogs
- *********************************************************************************/
- 
-#define YN_DLOG 133
-#define YNQ_DLOG 134
-#define YNAQ_DLOG 135
-#define YNNAQ_DLOG 136
-
-static int yn_user_item [] = {5, 6, 7, 8};
-static short gEnterItem, gEscItem;
-static const char *gRespStr = (const char *)0;
-static char gDef = 0;
-static short dlogID;
-
-
-static void
-SetEnterItem (DialogPtr dp, const short newEnterItem) {
-	short kind;
-	Handle item;
-	Rect r, r2;
-
-	if (gEnterItem != newEnterItem) {
-		GetDialogItem (dp, gEnterItem, &kind, &item, &r2);
-		InsetRect (&r2, - 4, - 4);
-		EraseRect (&r2);
-		InvalRect (&r2);
-
-		gEnterItem = newEnterItem;
-
-		GetDialogItem (dp, newEnterItem, &kind, &item, &r2);
-		frame_corner = kind == ctrlItem + btnCtrl ? 16 : 0;
-		InsetRect (&r2, - 4, - 4);
-		InvalRect (&r2);
-		r = r2;
-		GetDialogItem (dp, yn_user_item [dlogID - YN_DLOG], &kind, &item, &r2);
-		SetDialogItem (dp, yn_user_item [dlogID - YN_DLOG], kind, item, &r);
-	}
-}
-
-
-static void
-do_tabbing (DialogPtr dp) {
-	SetEnterItem(dp, gEnterItem == 1 ? strlen(gRespStr) : gEnterItem - 1);
-}
-
-
-static void
-set_yn_number(DialogPtr dp) {
-	if (gRespStr && gRespStr[gEnterItem-1] == '#') {
-		short k;
-		Handle h;
-		Rect r;
-		Str255 s;
-		GetDialogItem(dp, gEnterItem, &k, &h, &r);
-		GetDialogItemText(h, s);
-		if (s[0])
-			StringToNum(s, &yn_number);
-	}
-}
-
-
-static pascal Boolean
-YNAQFilter (DialogPtr dp, EventRecord *ev, short *itemHit) {
-	unsigned char code;
-	char ch;
-	char *re = (char *) gRespStr;
-
-	if (ev->what != keyDown) {
-
-		return 0;
-	}
-	code = (ev->message & 0xff00) >> 8;
-	ch = ev->message & 0xff;
-
-	switch (code) {
-	case 0x24 :
-	case 0x4c :
-		set_yn_number (dp);
-		*itemHit = gEnterItem;
-		FlashButton (dp, *itemHit);
-		return 1;
-	case 0x35 :
-	case 0x47 :
-		*itemHit = gEscItem;
-		FlashButton (dp, *itemHit);
-		return 1;
-	case 0x30 :
-		do_tabbing (dp);
-		return 0;
-	}
-	switch (ch) {
-	case '\r' :
-	case '\n' :
-	case ' ' :
-	case 3 :
-		set_yn_number (dp);
-		*itemHit = gEnterItem;
-		FlashButton (dp, *itemHit);
-		return 1;
-
-	case 9 :
-		do_tabbing (dp);
-		return 0;
-
-	case 27 :
-		*itemHit = gEscItem;
-		FlashButton (dp, *itemHit);
-		return 1;
-
-	case CHAR_BS :
-	case 28 : case 29 : case 30 : case 31 : /* the four arrow keys */
-	case '0' : case '1' : case '2' : case '3' : case '4' :
-	case '5' : case '6' : case '7' : case '8' : case '9' : {
-		char *loc = strchr (gRespStr, '#');
-		if (loc) {
-			SetEnterItem(dp, loc - gRespStr + 1);
-			return 0; /* Dialog Manager will then put this key into the text field. */
-		}
-	}
-	}
-
-	while (*re) {
-		if (*re == ch) {
-			*itemHit = (re - gRespStr) + 1;
-			FlashButton (dp, *itemHit);
-			return 1;
-		}
-		re ++;
-	}
-
-	nhbell ();
-	ev->what = nullEvent;
-	return 0;
-}
-
-
-static char
-do_question_dialog (char *query, int dlog, int defbut, char *resp) {
-	Str255 p;
-	DialogPtr dp;
-	short item;
-
-	char c = queued_resp ((char *) resp);
-	if (c)
-		return c;
-
-	dlogID = dlog;
-	C2P (query, p);
-	ParamText ((char *)p, (uchar *) 0, (uchar *) 0, (uchar *) 0);
-	dp = mv_get_new_dialog (dlog);
-	if (! dp) {
-		return 0;
-	}
-	SetPort (dp);
-	ShowWindow (dp);
-
-	gEscItem = strlen (resp);
-	gEnterItem = defbut;
-	gRespStr = resp;
-
-	SetFrameItem (dp, yn_user_item [dlogID - YN_DLOG], gEnterItem);
-
-	InitCursor ();
-	mv_modal_dialog (YNAQFilter, &item);
-	mv_close_dialog (dp);
-	return resp [item - 1];
-}
-
-
-static pascal Boolean
-OneCharDLOGFilter (DialogPtr dp, EventRecord *ev, short *item) {
-	char ch;
-	short k;
-	Handle h;
-	Rect r;
-	unsigned char com [2];
-
-	if (ev->what != keyDown) {
-		return 0;
-	}
-	ch = ev->message & 0xff;
-
-	com [0] = 1;
-	com [1] = ch;
-
-	if (ch == 27) {
-		GetDialogItem (dp, 4, &k, &h, &r);
-		SetDialogItemText (h, com);
-		*item = 2;
-		FlashButton (dp, 2);
-		return 1;
-	}
-	if (! gRespStr || strchr (gRespStr, ch)) {
-		GetDialogItem (dp, 4, &k, &h, &r);
-		SetDialogItemText (h, com);
-		*item = 1;
-		FlashButton (dp, 1);
-		return 1;
-	}
-	if (ch == 10 || ch == 13 || ch == 3 || ch == 32) {
-		com [1] = gDef;
-		GetDialogItem (dp, 4, &k, &h, &r);
-		SetDialogItemText (h, com);
-		*item = 1;
-		FlashButton (dp, 1);
-		return 1;
-	}
-	if (ch > 32 && ch < 127) {
-		GetDialogItem (dp, 4, &k, &h, &r);
-		SetDialogItemText (h, com);
-		*item = 1;
-		FlashButton (dp, 1);
-		return 1;
-	}
-	nhbell ();
-	ev->what = nullEvent;
-	return 1;
-}
-
-
-static char
-generic_yn_function (query, resp, def)
-const char *query, *resp;
-char def;
-{
-	DialogPtr dp;
-	short k, item;
-	Handle h;
-	Rect r;
-	unsigned char com [32] = {1, 27}; // margin for GetDialogItemText
-	Str255 pQuery;
-
-	char c = queued_resp ((char *) resp);
-	if (c)
-		return c;
-
-	dp = mv_get_new_dialog (137);
-	if (! dp) {
-		return 0;
-	}
-	SetPort (dp);
-	ShowWindow (dp);
-	InitCursor ();
-	SetFrameItem (dp, 6, 1);
-	if (def) {
-		com [1] = def;
-	}
-	strcpy ((char *) &pQuery[1], query);
-	if (resp && *resp) {
-		strcat ((char *) &pQuery[1], " (");
-		strcat ((char *) &pQuery[1], resp);
-		strcat ((char *) &pQuery[1], ")");
-	}
-	pQuery[0] = strlen (&pQuery[1]);
-	ParamText ((char *) pQuery, (uchar *) 0, (uchar *) 0, (uchar *) 0);
-	GetDialogItem (dp, 4, &k, &h, &r);
-	SetDialogItemText (h, com);
-	SelectDialogItemText (dp, 4, 0, 0x7fff);
-	InitCursor ();
-	SetFrameItem (dp, 6, 1);
-	gRespStr = resp;
-	gDef = def;
-	do {
-		mv_modal_dialog (OneCharDLOGFilter, &item);
-
-	} while (item != 1 && item != 2);
-	GetDialogItemText (h, com);
-
-	mv_close_dialog (dp);
-	if (item == 2 || ! com [0]) {
-		return 27; // escape
-	}
-	return com [1];
-}
-
-
-static char
-ynaq_dialog (query, resp, def)
-const char *query, *resp;
-char def;
-{
-	int dia = 0;
-
-	if (resp) {
-		if (! strcmp (resp, ynchars)) {
-			dia = YN_DLOG;
-		}
-		if (! strcmp (resp, ynqchars)) {
-			dia = YNQ_DLOG;
-		}
-		if (! strcmp (resp, ynaqchars)) {
-			dia = YNAQ_DLOG;
-		}
-		if (! strcmp (resp, ynNaqchars)) {
-			dia = YNNAQ_DLOG;
-		}
-	}
-	if (! dia) {
-		return generic_yn_function (query, resp, def);
-	}
-
-	return do_question_dialog ((char *) query, dia ,
-		(strchr (resp, def) - resp) + 1, (char *) resp);
-}
-
-
-char
-popup_yn_function(const char *query, const char *resp, char def) {
-	char ch;
-
-	if (ch = ynaq_dialog (query, resp, def))
-		return ch;
-
-	return topl_yn_function(query, resp, def);
-}
-
-
-/*********************************************************************************
- * mgetline routines using dialogs
- *********************************************************************************/
-
-static pascal Boolean
-getlinFilter (DialogPtr dp, EventRecord *ev, short *itemHit) {
-	if (ev->what == keyDown) {
-		int key = ev->message & keyCodeMask,
-			ch	= ev->message & charCodeMask;
-
-		if (ch == 0x1b || key == 0x3500 || key == 0x4700) {
-			*itemHit = 2;
-			FlashButton(dp, 2);
-			return true;
-		} else if (ch == CHAR_CR || ch == CHAR_ENTER) {
-			*itemHit = 1;
-			FlashButton(dp, 1);
-			return true;
-		}
-	}
-	return false;
-}
-
-
-
-static Boolean
-ExtendedCommandDialogFilter (DialogPtr dp, EventRecord *ev, short *item) {
-	int ix;
-	Handle h;
-	Rect r;
-	short k;
-	Str255 s;
-	unsigned char com [2];
-
-	if (ev->what != keyDown) {
-		return 0;
-	}
-	com [0] = 1;
-	com [1] = ev->message & 0xff;
-
-	if (com [1] == 10 || com [1] == 13 || com [1] == 32 ||
-		com [1] == 3) { // various "OK"
-		*item = 1;
-		FlashButton (dp, 1);
-		return 1;
-	}
-	if (com [1] == 27 || (ev->message & 0xff00 == 0x3500)) { // escape
-		*item = 2;
-		FlashButton (dp, 2);
-		return 1;
-	}
-	for (ix = 3; ix; ix ++) {
-		h = (Handle) 0;
-		k = 0;
-		GetDialogItem (dp, ix, &k, &h, &r);
-		if (! k || ! h) {
-			return 0;
-		}
-		if (k == 6) {	//	Radio Button Item
-			GetCTitle ((ControlHandle) h, s);
-			s [0] = 1;
-			if (! IUEqualString (com, s)) {
-				*item = ix;
-				return 1;
-			}
-		}
-	}
-/*NOTREACHED*/
-	return 0;
-}
-
-
-void
-popup_getlin (const char *query, char *bufp) {
-	ControlHandle	ctrl;
-	DialogPtr		promptDialog;
-	short			itemHit, type;
-	Rect			box;
-	Str255			pasStr;
-
-	if (get_line_from_key_queue (bufp))
-		return;
-
-	/*
-	** Make a copy of the prompt string and convert the copy to a Pascal string.
-	*/
-	
-	C2P(query, pasStr);
-	
-	/*
-	** Set the query line as parameter text.
-	*/
-	
-	ParamText(pasStr, "\p", "\p", "\p");
-	
-	promptDialog = mv_get_new_dialog(130);
-	ShowWindow(promptDialog);
-
-	InitCursor ();
-	SetFrameItem (promptDialog, 6, 1);
-	do {
-		mv_modal_dialog(&getlinFilter, &itemHit);
-	} while ((itemHit != 1) && (itemHit != 2));
-	
-	if (itemHit != 2) {
-		/*
-		** Get the text from the text edit item.
-		*/
-		
-		GetDialogItem(promptDialog, 4, &type, (Handle *) &ctrl, &box);
-		GetDialogItemText((Handle) ctrl, pasStr);
-		
-		/*
-		** Convert it to a 'C' string and copy it into the return value.
-		*/
-		
-		P2C (pasStr, bufp);
-	} else {
-		/*
-		** Return a null-terminated string consisting of a single <ESC>.
-		*/
-		
-		bufp[0] = '\033';
-		bufp[1] = '\0';
-	}
-	
-	mv_close_dialog(promptDialog);
-}
-
-#endif /* ENABLE_MAC_POPUP */
diff --git a/sys/mac/mttymain.c b/sys/mac/mttymain.c
index 9615b2dbf..07b882a83 100644
--- a/sys/mac/mttymain.c
+++ b/sys/mac/mttymain.c
@@ -232,7 +232,8 @@ short hor, vert;
 	SetPort (_mt_window);
 	SetOrigin (-1, -1);
 	
-	font_size = (iflags.large_font && !small_screen) ? 12 : 9;
+	font_size = iflags.wc_fontsiz_map ? iflags.wc_fontsiz_map :
+		(iflags.large_font && !small_screen) ? 12 : 9;
 	if (init_tty_number (_mt_window, win_fonts [NHW_MAP], font_size, CO, LI) != noErr)
 		error("_mt_init_stuff: Couldn't init tty.");
 
-- 
2.40.0