+ windefs winmisc
UXMISC = misc version uxstore settings tree234 uxnet proxy cmdline uxmisc
MACMISC = misc version macstore settings tree234 macnet mtcpnet otnet proxy
+ + macmisc
# Character set library, for use in pterm.
CHARSET = sbcsdat slookup sbcs utf8 toucs fromucs xenc mimeenc macenc
PuTTYtel : [M] terminal wcwidth ldiscucs logging be_nossh mac macdlg macevlog
+ macterm macucs mac_res.rsrc testback NONSSH MACMISC CHARSET
+ stricmp vsnprint
+PuTTYgen : [M] macpgen sshrsag sshdssg sshprime sshdes sshbn sshmd5 version
+ + sshrand macnoise sshsha macstore misc sshrsa sshdss macmisc sshpubk
+ + sshaes sshsh512 import macpgen.rsrc
\ No newline at end of file
-/* $Id: mac.c,v 1.47 2003/02/07 01:38:12 ben Exp $ */
+/* $Id: mac.c,v 1.48 2003/02/12 23:53:15 ben Exp $ */
/*
* Copyright (c) 1999 Ben Harris
* All rights reserved.
#include "ssh.h"
#include "mac.h"
-#if TARGET_API_MAC_CARBON
-/*
- * This is used by (I think) CarbonStdCLib, but only exists in
- * CarbonLib 1.1 and later. Muppets. Happily, it's documented to be
- * a synonym for NULL.
- */
-#include <CFBase.h>
-const CFAllocatorRef kCFAllocatorDefault = NULL;
-#else
-QDGlobals qd;
-#endif
-
Session *sesslist;
static int cold = 1;
exit(status);
}
-void fatalbox(char *fmt, ...) {
- va_list ap;
- Str255 stuff;
-
- va_start(ap, fmt);
- /* We'd like stuff to be a Pascal string */
- stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap);
- va_end(ap);
- ParamText(stuff, NULL, NULL, NULL);
- StopAlert(128, NULL);
- cleanup_exit(1);
-}
-
-void modalfatalbox(char *fmt, ...) {
- va_list ap;
- Str255 stuff;
-
- va_start(ap, fmt);
- /* We'd like stuff to be a Pascal string */
- stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap);
- va_end(ap);
- ParamText(stuff, NULL, NULL, NULL);
- StopAlert(128, NULL);
- cleanup_exit(1);
-}
-
/* This should only kill the current session, not the whole application. */
void connection_fatal(void *fontend, char *fmt, ...) {
va_list ap;
/* SGT: I have no idea whether Mac X servers need anything here. */
}
-Filename filename_from_str(const char *str)
-{
- Filename ret;
- Str255 tmp;
-
- /* XXX This fails for filenames over 255 characters long. */
- c2pstrcpy(tmp, str);
- FSMakeFSSpec(0, 0, tmp, &ret.fss);
- return ret;
-}
-
-/*
- * Convert a filename to a string for display purposes.
- * See pp 2-44--2-46 of IM:Files
- *
- * XXX static storage considered harmful
- */
-const char *filename_to_str(const Filename *fn)
-{
- CInfoPBRec pb;
- Str255 dirname;
- OSErr err;
- static char *path = NULL;
- char *newpath;
-
- if (path != NULL) sfree(path);
- path = smalloc(fn->fss.name[0]);
- p2cstrcpy(path, fn->fss.name);
- pb.dirInfo.ioNamePtr = dirname;
- pb.dirInfo.ioVRefNum = fn->fss.vRefNum;
- pb.dirInfo.ioDrParID = fn->fss.parID;
- pb.dirInfo.ioFDirIndex = -1;
- do {
- pb.dirInfo.ioDrDirID = pb.dirInfo.ioDrParID;
- err = PBGetCatInfoSync(&pb);
-
- /* XXX Assume not A/UX */
- newpath = smalloc(strlen(path) + dirname[0] + 2);
- p2cstrcpy(newpath, dirname);
- strcat(newpath, ":");
- strcat(newpath, path);
- sfree(path);
- path = newpath;
- } while (pb.dirInfo.ioDrDirID != fsRtDirID);
- return path;
-}
-
-int filename_equal(Filename f1, Filename f2)
-{
-
- return f1.fss.vRefNum == f2.fss.vRefNum &&
- f1.fss.parID == f2.fss.parID &&
- f1.fss.name[0] == f2.fss.name[0] &&
- memcmp(f1.fss.name + 1, f2.fss.name + 1, f1.fss.name[0]) == 0;
-}
-
-int filename_is_null(Filename fn)
-{
-
- return fn.fss.vRefNum == 0 && fn.fss.parID == 0 && fn.fss.name[0] == 0;
-}
-
-FILE *f_open(Filename fn, char const *mode)
-{
- short savevol;
- long savedir;
- char tmp[256];
- FILE *ret;
-
- HGetVol(NULL, &savevol, &savedir);
- if (HSetVol(NULL, fn.fss.vRefNum, fn.fss.parID) == noErr) {
- p2cstrcpy(tmp, fn.fss.name);
- ret = fopen(tmp, mode);
- } else
- ret = NULL;
- HSetVol(NULL, savevol, savedir);
- return ret;
-}
-
/*
* Local Variables:
* c-file-style: "simon"
-/* $Id: mac_res.r,v 1.26 2003/02/07 01:38:12 ben Exp $ */
+/* $Id: mac_res.r,v 1.27 2003/02/12 23:53:15 ben Exp $ */
/*
* Copyright (c) 1999, 2002 Ben Harris
* All rights reserved.
/* Get resource IDs we share with C code */
#include "macresid.h"
-/*
- * Current PuTTY version number. Minor is in BCD
- */
-#define VERSION_MAJOR 0x00
-#define VERSION_MINOR 0x53
+#include "version.r"
/*
* Finder-related resources
$"00FFFFFFFFFFFFFFFFFFFFFFFFFF"
};
-resource 'vers' (1, purgeable) {
-#ifdef RELEASE
- VERSION_MAJOR, VERSION_MINOR,
- beta,
-#else
- VERSION_MAJOR, VERSION_MINOR + 1,
- development,
-#endif
- 0, /* No prerelease version */
- verBritain,
-#ifdef RELEASESTR
- RELEASESTR,
- "Release " RELEASESTR,
-#else
-#ifdef SNAPSHOTSTR
- SNAPSHOTSTR,
- "Development snapshot " SNAPSHOTSTR,
-#else
- "unknown",
- "Unidentified build, " $$Date " " $$Time,
-#endif
-#endif
-};
-
-resource 'vers' (2, purgeable) {
-#ifdef RELEASE
- VERSION_MAJOR, VERSION_MINOR,
- beta,
-#else
- VERSION_MAJOR, VERSION_MINOR + 1,
- development,
-#endif
- 0, /* No prerelease version */
- verBritain,
-#ifdef RELEASESTR
- RELEASESTR,
- "PuTTY " RELEASESTR,
-#else
-#ifdef SNAPSHOTSTR
- SNAPSHOTSTR,
- "PuTTY snapshot " SNAPSHOTSTR,
-#else
- "unknown",
- "PuTTY",
-#endif
-#endif
-};
-
/*
* Resources to copy into created files
*/
--- /dev/null
+/* $Id: macmisc.c,v 1.1 2003/02/12 23:53:15 ben Exp $ */
+/*
+ * Copyright (c) 1999, 2003 Ben Harris
+ * All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <MacTypes.h>
+#include <Dialogs.h>
+#include <Files.h>
+#include <Quickdraw.h>
+#include <TextUtils.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "putty.h"
+
+#if TARGET_API_MAC_CARBON
+/*
+ * This is used by (I think) CarbonStdCLib, but only exists in
+ * CarbonLib 1.1 and later. Muppets. Happily, it's documented to be
+ * a synonym for NULL.
+ */
+#include <CFBase.h>
+const CFAllocatorRef kCFAllocatorDefault = NULL;
+#else
+QDGlobals qd;
+#endif
+
+void fatalbox(char *fmt, ...) {
+ va_list ap;
+ Str255 stuff;
+
+ va_start(ap, fmt);
+ /* We'd like stuff to be a Pascal string */
+ stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap);
+ va_end(ap);
+ ParamText(stuff, NULL, NULL, NULL);
+ StopAlert(128, NULL);
+ cleanup_exit(1);
+}
+
+void modalfatalbox(char *fmt, ...) {
+ va_list ap;
+ Str255 stuff;
+
+ va_start(ap, fmt);
+ /* We'd like stuff to be a Pascal string */
+ stuff[0] = vsprintf((char *)(&stuff[1]), fmt, ap);
+ va_end(ap);
+ ParamText(stuff, NULL, NULL, NULL);
+ StopAlert(128, NULL);
+ cleanup_exit(1);
+}
+
+Filename filename_from_str(const char *str)
+{
+ Filename ret;
+ Str255 tmp;
+
+ /* XXX This fails for filenames over 255 characters long. */
+ c2pstrcpy(tmp, str);
+ FSMakeFSSpec(0, 0, tmp, &ret.fss);
+ return ret;
+}
+
+/*
+ * Convert a filename to a string for display purposes.
+ * See pp 2-44--2-46 of IM:Files
+ *
+ * XXX static storage considered harmful
+ */
+const char *filename_to_str(const Filename *fn)
+{
+ CInfoPBRec pb;
+ Str255 dirname;
+ OSErr err;
+ static char *path = NULL;
+ char *newpath;
+
+ if (path != NULL) sfree(path);
+ path = smalloc(fn->fss.name[0]);
+ p2cstrcpy(path, fn->fss.name);
+ pb.dirInfo.ioNamePtr = dirname;
+ pb.dirInfo.ioVRefNum = fn->fss.vRefNum;
+ pb.dirInfo.ioDrParID = fn->fss.parID;
+ pb.dirInfo.ioFDirIndex = -1;
+ do {
+ pb.dirInfo.ioDrDirID = pb.dirInfo.ioDrParID;
+ err = PBGetCatInfoSync(&pb);
+
+ /* XXX Assume not A/UX */
+ newpath = smalloc(strlen(path) + dirname[0] + 2);
+ p2cstrcpy(newpath, dirname);
+ strcat(newpath, ":");
+ strcat(newpath, path);
+ sfree(path);
+ path = newpath;
+ } while (pb.dirInfo.ioDrDirID != fsRtDirID);
+ return path;
+}
+
+int filename_equal(Filename f1, Filename f2)
+{
+
+ return f1.fss.vRefNum == f2.fss.vRefNum &&
+ f1.fss.parID == f2.fss.parID &&
+ f1.fss.name[0] == f2.fss.name[0] &&
+ memcmp(f1.fss.name + 1, f2.fss.name + 1, f1.fss.name[0]) == 0;
+}
+
+int filename_is_null(Filename fn)
+{
+
+ return fn.fss.vRefNum == 0 && fn.fss.parID == 0 && fn.fss.name[0] == 0;
+}
+
+FILE *f_open(Filename fn, char const *mode)
+{
+ short savevol;
+ long savedir;
+ char tmp[256];
+ FILE *ret;
+
+ HGetVol(NULL, &savevol, &savedir);
+ if (HSetVol(NULL, fn.fss.vRefNum, fn.fss.parID) == noErr) {
+ p2cstrcpy(tmp, fn.fss.name);
+ ret = fopen(tmp, mode);
+ } else
+ ret = NULL;
+ HSetVol(NULL, savevol, savedir);
+ return ret;
+}
+
+/*
+ * Local Variables:
+ * c-file-style: "simon"
+ * End:
+ */
--- /dev/null
+/* $Id: macpgen.c,v 1.1 2003/02/12 23:53:15 ben Exp $ */
+/*
+ * Copyright (c) 1999, 2003 Ben Harris
+ * All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * macpgen.c - PuTTYgen for Mac OS
+ */
+
+#include <MacTypes.h>
+#include <AEDataModel.h>
+#include <AppleEvents.h>
+#include <Quickdraw.h>
+#include <Fonts.h>
+#include <MacWindows.h>
+#include <Menus.h>
+#include <TextEdit.h>
+#include <Appearance.h>
+#include <CodeFragments.h>
+#include <Dialogs.h>
+#include <Devices.h>
+#include <DiskInit.h>
+#include <Gestalt.h>
+#include <LowMem.h>
+#include <Navigation.h>
+#include <Resources.h>
+#include <Script.h>
+#include <TextCommon.h>
+#include <ToolUtils.h>
+#include <UnicodeConverter.h>
+
+#include <assert.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h> /* putty.h needs size_t */
+#include <stdio.h> /* for vsprintf */
+
+#define PUTTY_DO_GLOBALS
+
+#include "macpgrid.h"
+#include "putty.h"
+#include "ssh.h"
+#include "mac.h"
+
+static void mac_startup(void);
+static void mac_eventloop(void);
+#pragma noreturn (mac_eventloop)
+static void mac_event(EventRecord *);
+static void mac_contentclick(WindowPtr, EventRecord *);
+static void mac_growwindow(WindowPtr, EventRecord *);
+static void mac_activatewindow(WindowPtr, EventRecord *);
+static void mac_activateabout(WindowPtr, EventRecord *);
+static void mac_updatewindow(WindowPtr);
+static void mac_updatelicence(WindowPtr);
+static void mac_keypress(EventRecord *);
+static int mac_windowtype(WindowPtr);
+static void mac_menucommand(long);
+static void mac_openabout(void);
+static void mac_openlicence(void);
+static void mac_adjustcursor(RgnHandle);
+static void mac_adjustmenus(void);
+static void mac_closewindow(WindowPtr);
+static void mac_zoomwindow(WindowPtr, short);
+#pragma noreturn (cleanup_exit)
+
+struct mac_windows {
+ WindowPtr about;
+ WindowPtr licence;
+};
+
+struct mac_windows windows;
+int borednow;
+struct mac_gestalts mac_gestalts;
+
+int main (int argc, char **argv) {
+
+ mac_startup();
+ mac_eventloop();
+}
+
+#pragma noreturn (main)
+
+static void mac_startup(void) {
+ Handle menuBar;
+ TECInfoHandle ti;
+
+#if !TARGET_API_MAC_CARBON
+ /* Init Memory Manager */
+ MaxApplZone();
+ /* Init QuickDraw */
+ InitGraf(&qd.thePort);
+ /* Init Font Manager */
+ InitFonts();
+ /* Init Window Manager */
+ InitWindows();
+ /* Init Menu Manager */
+ InitMenus();
+ /* Init TextEdit */
+ TEInit();
+ /* Init Dialog Manager */
+ InitDialogs(NULL);
+#endif
+
+ /* Get base system version (only used if there's no better selector) */
+ if (Gestalt(gestaltSystemVersion, &mac_gestalts.sysvers) != noErr ||
+ (mac_gestalts.sysvers &= 0xffff) < 0x700)
+ fatalbox("PuTTY requires System 7 or newer");
+ /* Find out if we've got Color Quickdraw */
+ if (Gestalt(gestaltQuickdrawVersion, &mac_gestalts.qdvers) != noErr)
+ mac_gestalts.qdvers = gestaltOriginalQD;
+ /* ... and the Appearance Manager? */
+ if (Gestalt(gestaltAppearanceVersion, &mac_gestalts.apprvers) != noErr)
+ if (Gestalt(gestaltAppearanceAttr, NULL) == noErr)
+ mac_gestalts.apprvers = 0x0100;
+ else
+ mac_gestalts.apprvers = 0;
+#if TARGET_RT_MAC_CFM
+ /* Paranoia: Did we manage to pull in AppearanceLib? */
+ if (&RegisterAppearanceClient == kUnresolvedCFragSymbolAddress)
+ mac_gestalts.apprvers = 0;
+#endif
+#if TARGET_CPU_68K
+ mac_gestalts.cntlattr = 0;
+ mac_gestalts.windattr = 0;
+#else
+ /* Mac OS 8.5 Control Manager (proportional scrollbars)? */
+ if (Gestalt(gestaltControlMgrAttr, &mac_gestalts.cntlattr) != noErr ||
+ &SetControlViewSize == kUnresolvedCFragSymbolAddress)
+ mac_gestalts.cntlattr = 0;
+ /* Mac OS 8.5 Window Manager? */
+ if (Gestalt(gestaltWindowMgrAttr, &mac_gestalts.windattr) != noErr ||
+ &SetWindowContentColor == kUnresolvedCFragSymbolAddress)
+ mac_gestalts.windattr = 0;
+#endif
+ /* Text Encoding Conversion Manager? */
+ if (
+#if TARGET_RT_MAC_CFM
+ &TECGetInfo == kUnresolvedCFragSymbolAddress ||
+#else
+ InitializeUnicodeConverter(NULL) != noErr ||
+#endif
+ TECGetInfo(&ti) != noErr)
+ mac_gestalts.encvvers = 0;
+ else {
+ mac_gestalts.encvvers = (*ti)->tecVersion;
+ mac_gestalts.uncvattr = (*ti)->tecUnicodeConverterFeatures;
+ DisposeHandle((Handle)ti);
+ }
+ /* Navigation Services? */
+ if (NavServicesAvailable())
+ mac_gestalts.navsvers = NavLibraryVersion();
+ else
+ mac_gestalts.navsvers = 0;
+
+ /* We've been tested with the Appearance Manager */
+ if (mac_gestalts.apprvers != 0)
+ RegisterAppearanceClient();
+
+ menuBar = GetNewMBar(128);
+ if (menuBar == NULL)
+ fatalbox("Unable to create menu bar.");
+ SetMenuBar(menuBar);
+ AppendResMenu(GetMenuHandle(mApple), 'DRVR');
+ mac_adjustmenus();
+ DrawMenuBar();
+ InitCursor();
+ windows.about = NULL;
+ windows.licence = NULL;
+
+ flags = FLAG_INTERACTIVE;
+
+ /* Install Apple Event handlers. */
+#if 0
+ AEInstallEventHandler(kCoreEventClass, kAEOpenApplication,
+ NewAEEventHandlerUPP(&mac_aevt_oapp), 0, FALSE);
+ AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
+ NewAEEventHandlerUPP(&mac_aevt_odoc), 0, FALSE);
+ AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments,
+ NewAEEventHandlerUPP(&mac_aevt_pdoc), 0, FALSE);
+#endif
+ AEInstallEventHandler(kCoreEventClass, kAEQuitApplication,
+ NewAEEventHandlerUPP(&mac_aevt_quit), 0, FALSE);
+}
+
+static void mac_eventloop(void) {
+ Boolean gotevent;
+ EventRecord event;
+ RgnHandle cursrgn;
+
+ cursrgn = NewRgn();
+ for (;;) {
+ mac_adjustcursor(cursrgn);
+ gotevent = WaitNextEvent(everyEvent, &event, LONG_MAX, cursrgn);
+ mac_adjustcursor(cursrgn);
+ if (gotevent)
+ mac_event(&event);
+ if (borednow)
+ cleanup_exit(0);
+ }
+ DisposeRgn(cursrgn);
+}
+
+static void mac_event(EventRecord *event) {
+ short part;
+ WindowPtr window;
+
+ switch (event->what) {
+ case mouseDown:
+ part = FindWindow(event->where, &window);
+ switch (part) {
+ case inMenuBar:
+ mac_adjustmenus();
+ mac_menucommand(MenuSelect(event->where));
+ break;
+#if !TARGET_API_MAC_CARBON
+ case inSysWindow:
+ SystemClick(event, window);
+ break;
+#endif
+ case inContent:
+ if (window != FrontWindow())
+ /* XXX: check for movable modal dboxes? */
+ SelectWindow(window);
+ else
+ mac_contentclick(window, event);
+ break;
+ case inGoAway:
+ if (TrackGoAway(window, event->where))
+ mac_closewindow(window);
+ break;
+ case inDrag:
+ /* XXX: moveable modal check? */
+#if TARGET_API_MAC_CARBON
+ {
+ BitMap screenBits;
+
+ GetQDGlobalsScreenBits(&screenBits);
+ DragWindow(window, event->where, &screenBits.bounds);
+ }
+#else
+ DragWindow(window, event->where, &qd.screenBits.bounds);
+#endif
+ break;
+ case inGrow:
+ mac_growwindow(window, event);
+ break;
+ case inZoomIn:
+ case inZoomOut:
+ if (TrackBox(window, event->where, part))
+ mac_zoomwindow(window, part);
+ break;
+ }
+ break;
+ case keyDown:
+ case autoKey:
+ mac_keypress(event);
+ break;
+ case activateEvt:
+ mac_activatewindow((WindowPtr)event->message, event);
+ break;
+ case updateEvt:
+ mac_updatewindow((WindowPtr)event->message);
+ break;
+#if !TARGET_API_MAC_CARBON
+ case diskEvt:
+ if (HiWord(event->message) != noErr) {
+ Point pt;
+
+ SetPt(&pt, 120, 120);
+ DIBadMount(pt, event->message);
+ }
+ break;
+#endif
+ case kHighLevelEvent:
+ AEProcessAppleEvent(event); /* errors? */
+ break;
+ }
+}
+
+static void mac_contentclick(WindowPtr window, EventRecord *event) {
+ short item;
+ DialogRef dialog;
+
+ switch (mac_windowtype(window)) {
+ case wAbout:
+ dialog = GetDialogFromWindow(window);
+ if (DialogSelect(event, &dialog, &item))
+ switch (item) {
+ case wiAboutLicence:
+ mac_openlicence();
+ break;
+ }
+ break;
+ }
+}
+
+static void mac_growwindow(WindowPtr window, EventRecord *event) {
+
+ switch (mac_windowtype(window)) {
+ }
+}
+
+static void mac_activatewindow(WindowPtr window, EventRecord *event) {
+ int active;
+
+ active = (event->modifiers & activeFlag) != 0;
+ mac_adjustmenus();
+ switch (mac_windowtype(window)) {
+ case wAbout:
+ mac_activateabout(window, event);
+ break;
+ }
+}
+
+static void mac_activateabout(WindowPtr window, EventRecord *event) {
+ DialogRef dialog;
+ DialogItemType itemtype;
+ Handle itemhandle;
+ short item;
+ Rect itemrect;
+ int active;
+
+ dialog = GetDialogFromWindow(window);
+ active = (event->modifiers & activeFlag) != 0;
+ GetDialogItem(dialog, wiAboutLicence, &itemtype, &itemhandle, &itemrect);
+ HiliteControl((ControlHandle)itemhandle, active ? 0 : 255);
+ DialogSelect(event, &dialog, &item);
+}
+
+static void mac_updatewindow(WindowPtr window)
+{
+#if TARGET_API_MAC_CARBON
+ RgnHandle rgn;
+#endif
+
+ switch (mac_windowtype(window)) {
+ case wAbout:
+ BeginUpdate(window);
+#if TARGET_API_MAC_CARBON
+ rgn = NewRgn();
+ GetPortVisibleRegion(GetWindowPort(window), rgn);
+ UpdateDialog(GetDialogFromWindow(window), rgn);
+ DisposeRgn(rgn);
+#else
+ UpdateDialog(window, window->visRgn);
+#endif
+ EndUpdate(window);
+ break;
+ case wLicence:
+ mac_updatelicence(window);
+ break;
+ }
+}
+
+static void mac_updatelicence(WindowPtr window)
+{
+ Handle h;
+ int len;
+ long fondsize;
+ Rect textrect;
+
+ SetPort((GrafPtr)GetWindowPort(window));
+ BeginUpdate(window);
+ fondsize = GetScriptVariable(smRoman, smScriptSmallFondSize);
+ TextFont(HiWord(fondsize));
+ TextSize(LoWord(fondsize));
+ h = Get1Resource('TEXT', wLicence);
+ len = GetResourceSizeOnDisk(h);
+#if TARGET_API_MAC_CARBON
+ GetPortBounds(GetWindowPort(window), &textrect);
+#else
+ textrect = window->portRect;
+#endif
+ if (h != NULL) {
+ HLock(h);
+ TETextBox(*h, len, &textrect, teFlushDefault);
+ HUnlock(h);
+ }
+ EndUpdate(window);
+}
+
+/*
+ * Work out what kind of window we're dealing with.
+ */
+static int mac_windowtype(WindowPtr window)
+{
+
+#if !TARGET_API_MAC_CARBON
+ if (GetWindowKind(window) < 0)
+ return wDA;
+#endif
+ return ((WinInfo *)GetWRefCon(window))->wtype;
+}
+
+/*
+ * Handle a key press
+ */
+static void mac_keypress(EventRecord *event) {
+ WindowPtr window;
+
+ window = FrontWindow();
+ if (event->what == keyDown && (event->modifiers & cmdKey)) {
+ mac_adjustmenus();
+ mac_menucommand(MenuKey(event->message & charCodeMask));
+ } else {
+ switch (mac_windowtype(window)) {
+ }
+ }
+}
+
+static void mac_menucommand(long result) {
+ short menu, item;
+ WindowPtr window;
+#if !TARGET_API_MAC_CARBON
+ Str255 da;
+#endif
+
+ menu = HiWord(result);
+ item = LoWord(result);
+ window = FrontWindow();
+ /* Things which do the same whatever window we're in. */
+ switch (menu) {
+ case mApple:
+ switch (item) {
+ case iAbout:
+ mac_openabout();
+ goto done;
+#if !TARGET_API_MAC_CARBON
+ default:
+ GetMenuItemText(GetMenuHandle(mApple), item, da);
+ OpenDeskAcc(da);
+ goto done;
+#endif
+ }
+ break;
+ case mFile:
+ switch (item) {
+ case iClose:
+ mac_closewindow(window);
+ goto done;
+ case iQuit:
+ cleanup_exit(0);
+ goto done;
+ }
+ break;
+ }
+ /* If we get here, handling is up to window-specific code. */
+ switch (mac_windowtype(window)) {
+ }
+ done:
+ HiliteMenu(0);
+}
+
+static void mac_openabout(void) {
+ DialogItemType itemtype;
+ Handle item;
+ VersRecHndl vers;
+ Rect box;
+ StringPtr longvers;
+ WinInfo *wi;
+
+ if (windows.about)
+ SelectWindow(windows.about);
+ else {
+ windows.about =
+ GetDialogWindow(GetNewDialog(wAbout, NULL, (WindowPtr)-1));
+ wi = smalloc(sizeof(*wi));
+ wi->s = NULL;
+ wi->wtype = wAbout;
+ SetWRefCon(windows.about, (long)wi);
+ vers = (VersRecHndl)Get1Resource('vers', 1);
+ if (vers != NULL && *vers != NULL) {
+ longvers = (*vers)->shortVersion + (*vers)->shortVersion[0] + 1;
+ GetDialogItem(GetDialogFromWindow(windows.about), wiAboutVersion,
+ &itemtype, &item, &box);
+ assert(itemtype & kStaticTextDialogItem);
+ SetDialogItemText(item, longvers);
+ }
+ ShowWindow(windows.about);
+ }
+}
+
+static void mac_openlicence(void) {
+ WinInfo *wi;
+
+ if (windows.licence)
+ SelectWindow(windows.licence);
+ else {
+ windows.licence = GetNewWindow(wLicence, NULL, (WindowPtr)-1);
+ wi = smalloc(sizeof(*wi));
+ wi->s = NULL;
+ wi->wtype = wLicence;
+ SetWRefCon(windows.licence, (long)wi);
+ ShowWindow(windows.licence);
+ }
+}
+
+static void mac_closewindow(WindowPtr window) {
+
+ switch (mac_windowtype(window)) {
+#if !TARGET_API_MAC_CARBON
+ case wDA:
+ CloseDeskAcc(GetWindowKind(window));
+ break;
+#endif
+ case wAbout:
+ windows.about = NULL;
+ DisposeDialog(GetDialogFromWindow(window));
+ break;
+ case wLicence:
+ windows.licence = NULL;
+ DisposeWindow(window);
+ break;
+ }
+}
+
+static void mac_zoomwindow(WindowPtr window, short part) {
+
+ /* FIXME: do something */
+}
+
+/*
+ * Make the menus look right before the user gets to see them.
+ */
+#if TARGET_API_MAC_CARBON
+#define EnableItem EnableMenuItem
+#define DisableItem DisableMenuItem
+#endif
+static void mac_adjustmenus(void) {
+ WindowPtr window;
+ MenuHandle menu;
+
+ window = FrontWindow();
+ menu = GetMenuHandle(mApple);
+ EnableItem(menu, 0);
+ EnableItem(menu, iAbout);
+
+ menu = GetMenuHandle(mFile);
+ EnableItem(menu, 0);
+ EnableItem(menu, iNew);
+ if (window != NULL)
+ EnableItem(menu, iClose);
+ else
+ DisableItem(menu, iClose);
+ EnableItem(menu, iQuit);
+
+ switch (mac_windowtype(window)) {
+ default:
+ DisableItem(menu, iSave);
+ DisableItem(menu, iSaveAs);
+ menu = GetMenuHandle(mEdit);
+ DisableItem(menu, 0);
+ menu = GetMenuHandle(mWindow);
+ DisableItem(menu, 0); /* Until we get more than 1 item on it. */
+ break;
+ }
+ DrawMenuBar();
+}
+
+/*
+ * Make sure the right cursor's being displayed.
+ */
+static void mac_adjustcursor(RgnHandle cursrgn) {
+ Point mouse;
+ WindowPtr window, front;
+ short part;
+#if TARGET_API_MAC_CARBON
+ Cursor arrow;
+ RgnHandle visrgn;
+#endif
+
+ GetMouse(&mouse);
+ LocalToGlobal(&mouse);
+ part = FindWindow(mouse, &window);
+ front = FrontWindow();
+ if (part != inContent || window == NULL || window != front) {
+ /* Cursor isn't in the front window, so switch to arrow */
+#if TARGET_API_MAC_CARBON
+ GetQDGlobalsArrow(&arrow);
+ SetCursor(&arrow);
+#else
+ SetCursor(&qd.arrow);
+#endif
+ SetRectRgn(cursrgn, SHRT_MIN, SHRT_MIN, SHRT_MAX, SHRT_MAX);
+ if (front != NULL) {
+#if TARGET_API_MAC_CARBON
+ visrgn = NewRgn();
+ GetPortVisibleRegion(GetWindowPort(front), visrgn);
+ DiffRgn(cursrgn, visrgn, cursrgn);
+ DisposeRgn(visrgn);
+#else
+ DiffRgn(cursrgn, front->visRgn, cursrgn);
+#endif
+ }
+ } else {
+ switch (mac_windowtype(window)) {
+ default:
+#if TARGET_API_MAC_CARBON
+ GetQDGlobalsArrow(&arrow);
+ SetCursor(&arrow);
+ GetPortVisibleRegion(GetWindowPort(window), cursrgn);
+#else
+ SetCursor(&qd.arrow);
+ CopyRgn(window->visRgn, cursrgn);
+#endif
+ break;
+ }
+ }
+}
+
+pascal OSErr mac_aevt_quit(const AppleEvent *req, AppleEvent *reply,
+ long refcon)
+{
+ DescType type;
+ Size size;
+
+ if (AEGetAttributePtr(req, keyMissedKeywordAttr, typeWildCard,
+ &type, NULL, 0, &size) == noErr)
+ return errAEParamMissed;
+
+ borednow = 1;
+ return noErr;
+}
+
+void cleanup_exit(int status)
+{
+
+#if !TARGET_RT_MAC_CFM
+ if (mac_gestalts.encvvers != 0)
+ TerminateUnicodeConverter();
+#endif
+ exit(status);
+}
+
+/*
+ * Local Variables:
+ * c-file-style: "simon"
+ * End:
+ */
--- /dev/null
+/* $Id: macpgen.r,v 1.1 2003/02/12 23:53:15 ben Exp $ */
+/*
+ * Copyright (c) 1999, 2002 Ben Harris
+ * All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/* PuTTYgen resources */
+
+/*
+ * The space after the # for system includes is to stop mkfiles.pl
+ * trying to chase them (Rez doesn't support the angle-bracket
+ * syntax).
+ */
+
+# include "Types.r"
+# include "Dialogs.r"
+# include "Palettes.r"
+# include "Script.r"
+
+
+/* Get resource IDs we share with C code */
+#include "macpgrid.h"
+
+#include "version.r"
+
+/*
+ * Finder-related resources
+ */
+
+/* 'pGen' is now registered with Apple as PuTTYgen's signature */
+
+type 'pGen' as 'STR ';
+
+resource 'pGen' (0, purgeable) {
+ "PuTTYgen experimental Mac port"
+};
+
+resource 'SIZE' (-1) {
+ reserved,
+ ignoreSuspendResumeEvents,
+ reserved,
+ canBackground,
+ needsActivateOnFGSwitch,
+ backgroundAndForeground,
+ dontGetFrontClicks,
+ ignoreAppDiedEvents,
+ is32BitCompatible,
+ isHighLevelEventAware,
+ localandRemoteHLEvents,
+ isStationeryAware,
+ dontUseTextEditServices,
+ reserved,
+ reserved,
+ reserved,
+ 1024 * 1024, /* Minimum size */
+ 1024 * 1024, /* Preferred size */
+};
+
+#define FREF_APPL 128
+#define FREF_Seed 132
+
+resource 'FREF' (FREF_APPL, purgeable) {
+ /* The application itself */
+ 'APPL', FREF_APPL, ""
+};
+
+resource 'FREF' (FREF_Seed, purgeable) {
+ /* Random seed */
+ 'Seed', FREF_Seed, ""
+};
+
+/* "Internal" file types, which can't be opened */
+resource 'BNDL' (129, purgeable) {
+ 'pTTI', 0,
+ {
+ 'ICN#', {
+ FREF_Seed, FREF_Seed,
+ },
+ 'FREF', {
+ FREF_Seed, FREF_Seed,
+ };
+ };
+};
+
+resource 'kind' (129) {
+ 'pTTI',
+ verBritain,
+ {
+ 'Seed', "PuTTY random number seed",
+ }
+};
+
+/* Icons, courtesy of DeRez */
+
+/* Random seed icon */
+
+resource 'ICN#' (FREF_Seed, purgeable) {
+ { /* array: 2 elements */
+ /* [1] */
+ $"1FFFFC00 18F36600 161EF500 1CC92C80"
+ $"1CF2EC40 10662C20 108E07F0 151F0490"
+ $"1E00C4F0 1803BBD0 1FC5BE10 108B5A90"
+ $"1B3C4F50 1267AC90 14B60470 1BB791B0"
+ $"17F4D2B0 1DC1F830 1B029450 1B753DD0"
+ $"145A8170 11390DD0 1E15A8B0 1CC4CD90"
+ $"154ECED0 15C9CF30 172CDB50 12617970"
+ $"15E45C90 1D4B9890 15CE4430 1FFFFFF0",
+ /* [2] */
+ $"1FFFFC00 1FFFFE00 1FFFFF00 1FFFFF80"
+ $"1FFFFFC0 1FFFFFE0 1FFFFFF0 1FFFFFF0"
+ $"1FFFFFF0 1FFFFFF0 1FFFFFF0 1FFFFFF0"
+ $"1FFFFFF0 1FFFFFF0 1FFFFFF0 1FFFFFF0"
+ $"1FFFFFF0 1FFFFFF0 1FFFFFF0 1FFFFFF0"
+ $"1FFFFFF0 1FFFFFF0 1FFFFFF0 1FFFFFF0"
+ $"1FFFFFF0 1FFFFFF0 1FFFFFF0 1FFFFFF0"
+ $"1FFFFFF0 1FFFFFF0 1FFFFFF0 1FFFFFF0"
+ }
+};
+resource 'icl4' (FREF_Seed) {
+ $"000FFFFFFFFFFFFFFFFFFF0000000000"
+ $"000FFC0CFFFF0CFF1FFC0FF000000000"
+ $"000F0FF0C0CFFFF1FFFFCFCF00000000"
+ $"000FFF0CFF0CF11F0CFCFFCCF0000000"
+ $"000FFFC0FFFF11F0FFF0FFCCCF000000"
+ $"000F0C0C0FF11FFC0CFCFFCCCCF00000"
+ $"000FC0C0F111FFF0C0C0CFFFFFFF0000"
+ $"000F0F0F111FFFFF0C0C0F0CFC0F0000"
+ $"000FFFF111111111FFC0CFC0FFFF0000"
+ $"000FF111111111FFFCFFF0FFFF0F0000"
+ $"000FFFFFFF111FCFF0FFFFF0C0CF0000"
+ $"000F0C0CF111FCFF0F0FFCFCFC0F0000"
+ $"000FF0FF11FFFFC0CFC0FFFFCFCF0000"
+ $"000F0CF11FFC0FFFFCFCFF0CFC0F0000"
+ $"000FCF11F0FFCFF0C0C0CFC0CFFF0000"
+ $"000FF1FFFCFF0FFFFC0F0C0FFCFF0000"
+ $"000F1FFFFFFFCFC0FFCFC0F0F0FF0000"
+ $"000FFF0FFF0C0C0FFFFFFC0C0CFF0000"
+ $"000FF0FFC0C0C0F0F0CF0FC0CFCF0000"
+ $"000FFCFF0FFF0F0F0CFFFF0FFF0F0000"
+ $"000FCFC0CF0FF0F0F0C0C0CFCFFF0000"
+ $"000F0C0F0CFFFC0F0C0CFF0FFF0F0000"
+ $"000FFFF0C0CFCFCFF0F0F0C0F0FF0000"
+ $"000FFF0CFF0C0F0CFF0CFF0FFC0F0000"
+ $"000FCFCF0FC0FFF0FFC0FFF0FFCF0000"
+ $"000F0F0FFF0CFC0FFF0CFFFF0CFF0000"
+ $"000FCFFFC0F0FFC0FFCFF0FFCFCF0000"
+ $"000F0CFC0FFC0C0F0FFFFC0F0FFF0000"
+ $"000FCFCFFFF0CFC0CFCFFFC0F0CF0000"
+ $"000FFF0F0F0CF0FFFC0FFC0CFC0F0000"
+ $"000FCFCFFFC0FFF0CFC0CFC0C0FF0000"
+ $"000FFFFFFFFFFFFFFFFFFFFFFFFF"
+};
+resource 'icl8' (FREF_Seed) {
+ $"000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000"
+ $"000000FFFFF5F5F5FFFFFFFFF5F5FFFF05FFFFF5F5FFFF000000000000000000"
+ $"000000FFF5FFFFF5F5F5F5FFFFFFFF05FFFFFFFFF5FF2BFF0000000000000000"
+ $"000000FFFFFFF5F5FFFFF5F5FF0505FF0000FFF5FFFF2B2BFF00000000000000"
+ $"000000FFFFFFF5F5FFFFFFFF0505FFF5FFFFFFF5FFFF2B2B2BFF000000000000"
+ $"000000FFF5F5F5F5F5FFFF0505FFFFF5F5F5FFF5FFFF2B2B2B2BFF0000000000"
+ $"000000FFF5F5F5F5FF050505FFFFFFF5F5F5F5F5F5FFFFFFFFFFFFFF00000000"
+ $"000000FFF5FFF5FF050505FFFFFFFFFFF5F5F5F5F5FFF5F5FFF5F5FF00000000"
+ $"000000FFFFFFFF050505050505050505FFFFF5F5F5FFF5F5FFFFFFFF00000000"
+ $"000000FFFF050505050505050505FFFFFFF5FFFFFFF5FFFFFFFFF5FF00000000"
+ $"000000FFFFFFFFFFFFFF050505FFF5FFFFF5FFFFFFFFFFF5F5F5F5FF00000000"
+ $"000000FFF5F5F5F5FF050505FFF5FFFFF5FFF5FFFFF5FFF5FFF5F5FF00000000"
+ $"000000FFFFF5FFFF0505FFFFFFFFF5F5F5FFF5F5FFFFFFFFF5FFF5FF00000000"
+ $"000000FFF5F5FF0505FFFFF5F5FFFFFFFFF5FFF5FFFFF5F5FFF5F5FF00000000"
+ $"000000FFF5FF0505FFF5FFFFF5FFFFF5F5F5F5F5F5FFF5F5F5FFFFFF00000000"
+ $"000000FFFF05FFFFFFF5FFFFF5FFFFFFFFF5F5FFF5F5F5FFFFF5FFFF00000000"
+ $"000000FF05FFFFFFFFFFFFFFF5FFF5F5FFFFF5FFF5F5FFF5FFF5FFFF00000000"
+ $"000000FFFFFFF5FFFFFFF5F5F5F5F5FFFFFFFFFFFFF5F5F5F5F5FFFF00000000"
+ $"000000FFFFF5FFFFF5F5F5F5F5F5FF00FFF5F5FFF5FFF5F5F5FFF5FF00000000"
+ $"000000FFFFF5FFFFF5FFFFFFF5FF00FFF5F5FFFFFFFFF5FFFFFFF5FF00000000"
+ $"000000FFF5FFF5F5F5FFF5FFFF00FF00FFF5F5F5F5F5F5FFF5FFFFFF00000000"
+ $"000000FFF5F5F5FFF5F5FFFFFF0000FFF5F5F5F5FFFFF5FFFFFF00FF00000000"
+ $"000000FFFFFFFFF5F5F5F5FFF5FF00FFFFF5FFF5FFF5F5F5FF00FFFF00000000"
+ $"000000FFFFFFF5F5FFFFF5F5F5FF0000FFFFF5F5FFFFF5FFFF0000FF00000000"
+ $"000000FFF5FFF5FFF5FFF5F5FFFFFF00FFFFF5F5FFFFFFF5FFFF00FF00000000"
+ $"000000FFF5FFF5FFFFFFF5F5FFF5F5FFFFFFF5F5FFFFFFFFF5F5FFFF00000000"
+ $"000000FFF5FFFFFFF5F5FFF5FFFFF5F5FFFFF5FFFFF5FFFFF5FFF5FF00000000"
+ $"000000FFF5F5FFF5F5FFFFF5F5F5F5FFF5FFFFFFFFF5F5FFF5FFFFFF00000000"
+ $"000000FFF5FFF5FFFFFFFFF5F5FFF5F5F5FFF5FFFFFFF5F5FFF5F5FF00000000"
+ $"000000FFFFFFF5FFF5FFF5F5FFF5FFFFFFF5F5FFFFF5F5F5FFF5F5FF00000000"
+ $"000000FFF5FFF5FFFFFFF5F5FFFFFFF5F5FFF5F5F5FFF5F5F5F5FFFF00000000"
+ $"000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+};
+resource 'ics#' (FREF_Seed) {
+ { /* array: 2 elements */
+ /* [1] */
+ $"7FE0 56B0 59A8 637C 51DC 6794 59AC 76EC"
+ $"7224 7C6C 743C 71AC 505C 459C 4424 7FFC",
+ /* [2] */
+ $"7FE0 7FF0 7FF8 7FFC 7FFC 7FFC 7FFC 7FFC"
+ $"7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC"
+ }
+};
+resource 'ics4' (FREF_Seed) {
+ $"0FFFFFFFFFF00000"
+ $"0F0F0FF1FCFF0000"
+ $"0FCFF11FF0FCF000"
+ $"0FF111FF0FFFFF00"
+ $"0FCF111FFFCFFF00"
+ $"0FF11FFFFC0F0F00"
+ $"0F1FF0CFF0F0FF00"
+ $"0FFF0FFCFFFCFF00"
+ $"0FFFC0F0C0F0CF00"
+ $"0FFFFF0C0FFCFF00"
+ $"0FFFCFC0C0FFFF00"
+ $"0FFF0C0FFCFCFF00"
+ $"0FCFC0C0CFCFFF00"
+ $"0F0C0F0FFC0FFF00"
+ $"0FC0CFC0C0F0CF00"
+ $"0FFFFFFFFFFFFF"
+};
+resource 'ics8' (FREF_Seed) {
+ $"00FFFFFFFFFFFFFFFFFFFF0000000000"
+ $"00FFF5FFF5FFFF05FFF5FFFF00000000"
+ $"00FFF5FFFF0505FFFFF5FF2BFF000000"
+ $"00FFFF050505FFFFF5FFFFFFFFFF0000"
+ $"00FFF5FF050505FFFFFFF5FFFFFF0000"
+ $"00FFFF0505FFFFFFFFF5F5FFF5FF0000"
+ $"00FF05FFFFF5F5FFFFF5FFF5FFFF0000"
+ $"00FFFFFFF5FFFFF5FFFFFFF5FFFF0000"
+ $"00FFFFFFF5F5FFF5F5F5FFF5F5FF0000"
+ $"00FFFFFFFFFFF5F5F5FFFFF5FFFF0000"
+ $"00FFFFFFF5FFF5F5F5F5FFFFFFFF0000"
+ $"00FFFFFFF5F5F5FFFFF5FFF5FFFF0000"
+ $"00FFF5FFF5F5F5F5F5FFF5FFFFFF0000"
+ $"00FFF5F5F5FFF5FFFFF5F5FFFFFF0000"
+ $"00FFF5F5F5FFF5F5F5F5FFF5F5FF0000"
+ $"00FFFFFFFFFFFFFFFFFFFFFFFFFF"
+};
+
+/*
+ * Application-missing message string, for random seed and host key database
+ * files.
+ */
+resource 'STR ' (-16397, purgeable) {
+ "This file is used internally by PuTTY. It cannot be opened."
+};
+
+
+/*
+ * Internal resources
+ */
+
+/* Menu bar */
+
+resource 'MBAR' (MBAR_Main, preload) {
+ { mApple, mFile, mEdit, mWindow }
+};
+
+resource 'MENU' (mApple, preload) {
+ mApple,
+ textMenuProc,
+ 0b11111111111111111111111111111101,
+ enabled,
+ apple,
+ {
+ "About PuTTYgen\0xc9", noicon, nokey, nomark, plain,
+ "-", noicon, nokey, nomark, plain,
+ }
+};
+
+resource 'MENU' (mFile, preload) {
+ mFile,
+ textMenuProc,
+ 0b11111111111111111111111101111011,
+ enabled,
+ "File",
+ {
+ "New", noicon, "N", nomark, plain,
+ "Open\0xc9", noicon, "O", nomark, plain,
+ "-", noicon, nokey, nomark, plain,
+ "Close", noicon, "W", nomark, plain,
+ "Save", noicon, "S", nomark, plain,
+ "Save As\0xc9", noicon, nokey, nomark, plain,
+ "-", noicon, nokey, nomark, plain,
+ "Quit", noicon, "Q", nomark, plain,
+ }
+};
+
+resource 'MENU' (mEdit, preload) {
+ mEdit,
+ textMenuProc,
+ 0b11111111111111111111111111111101,
+ enabled,
+ "Edit",
+ {
+ "Undo", noicon, "Z", nomark, plain,
+ "-", noicon, nokey, nomark, plain,
+ "Cut", noicon, "X", nomark, plain,
+ "Copy", noicon, "C", nomark, plain,
+ "Paste", noicon, "V", nomark, plain,
+ "Clear", noicon, nokey, nomark, plain,
+ "Select All", noicon, "A", nomark, plain,
+ }
+};
+
+resource 'MENU' (mWindow, preload) {
+ mWindow,
+ textMenuProc,
+ 0b11111111111111111111111111111111,
+ enabled,
+ "Window",
+ {
+ }
+};
+
+/* Fatal error box. Stolen from the Finder. */
+
+resource 'ALRT' (wFatal, "fatalbox", purgeable) {
+ {54, 67, 152, 435},
+ wFatal,
+ beepStages,
+ alertPositionMainScreen
+};
+
+resource 'DITL' (wFatal, "fatalbox", purgeable) {
+ { /* array DITLarray: 3 elements */
+ /* [1] */
+ {68, 299, 88, 358},
+ Button {
+ enabled,
+ "OK"
+ },
+ /* [2] */
+ {68, 227, 88, 286},
+ StaticText {
+ disabled,
+ ""
+ },
+ /* [3] */
+ {7, 74, 55, 358},
+ StaticText {
+ disabled,
+ "^0"
+ }
+ }
+};
+
+/* "About" box */
+
+resource 'DLOG' (wAbout, "about", purgeable) {
+ { 0, 0, 120, 240 },
+ noGrowDocProc,
+ invisible,
+ goAway,
+ wAbout, /* RefCon -- identifies the window to PuTTY */
+ wAbout, /* DITL ID */
+ "About PuTTYgen",
+ alertPositionMainScreen
+};
+
+resource 'dlgx' (wAbout, "about", purgeable) {
+ versionZero {
+ kDialogFlagsUseThemeBackground | kDialogFlagsUseThemeControls
+ }
+};
+
+resource 'DITL' (wAbout, "about", purgeable) {
+ {
+ { 87, 13, 107, 227 },
+ Button { enabled, "View Licence" },
+ { 13, 13, 29, 227 },
+ StaticText { disabled, "PuTTYgen"},
+ { 42, 13, 74, 227 },
+ StaticText { disabled, "Some version or other\n"
+ "Copyright © 1997-9 Simon Tatham"},
+ }
+};
+
+/* Licence box */
+
+resource 'WIND' (wLicence, "licence", purgeable) {
+ { 0, 0, 250, 400 },
+ noGrowDocProc,
+ visible,
+ goAway,
+ wLicence,
+ "PuTTYgen Licence",
+ alertPositionParentWindowScreen
+};
+
+type 'TEXT' {
+ string;
+};
+
+resource 'TEXT' (wLicence, "licence", purgeable) {
+ "Copyright 1997-2003 Simon Tatham.\n"
+ "\n"
+ "Portions copyright Robert de Bath, Joris van Rantwijk, Delian"
+ "Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,"
+ "Justin Bradford, Ben Harris, and CORE SDI S.A.\n"
+ "\n"
+ "Permission is hereby granted, free of charge, to any person "
+ "obtaining a copy of this software and associated documentation "
+ "files (the \"Software\"), to deal in the Software without "
+ "restriction, including without limitation the rights to use, "
+ "copy, modify, merge, publish, distribute, sublicense, and/or "
+ "sell copies of the Software, and to permit persons to whom the "
+ "Software is furnished to do so, subject to the following "
+ "conditions:\n\n"
+
+ "The above copyright notice and this permission notice shall be "
+ "included in all copies or substantial portions of the Software.\n\n"
+
+ "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, "
+ "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF "
+ "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND "
+ "NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR "
+ "ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF "
+ "CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN "
+ "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE "
+ "SOFTWARE."
+};
--- /dev/null
+/* $Id: macpgrid.h,v 1.1 2003/02/12 23:53:15 ben Exp $ */
+
+/*
+ * macpgrid.h -- Mac resource IDs for PuTTYgen
+ *
+ * This file is shared by C and Rez source files
+ */
+
+/* Menu bar IDs */
+#define MBAR_Main 128
+
+/* Menu IDs */
+#define mApple 128
+#define mFile 129
+#define mEdit 130
+#define mWindow 131
+
+/* Menu Items */
+/* Apple menu */
+#define iAbout 1
+/* File menu */
+#define iNew 1
+#define iOpen 2
+#define iClose 4
+#define iSave 5
+#define iSaveAs 6
+#define iQuit 8
+/* Edit menu */
+#define iUndo 1
+#define iCut 3
+#define iCopy 4
+#define iPaste 5
+#define iClear 6
+#define iSelectAll 7
+/* Window menu */
+
+/* Window types (and resource IDs) */
+#define wNone 0 /* Dummy value for no window */
+#define wDA 1 /* Dummy value for desk accessory */
+#define wFatal 128
+#define wAbout 129
+#define wiAboutLicence 1
+#define wiAboutVersion 3
+#define wLicence 131