1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-25 01:02:24 +00:00

Minimal shell of PuTTYgen for Mac. No actual PuTTYgen-specific code there

yet, but an absence of PuTTY-specific code.

[originally from svn r2842]
This commit is contained in:
Ben Harris 2003-02-12 23:53:15 +00:00
parent a427048b29
commit 8dcbb16ec2
7 changed files with 1309 additions and 172 deletions

4
Recipe
View File

@ -117,6 +117,7 @@ WINMISC = misc version winstore settings tree234 winnet proxy cmdline
+ 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
@ -158,3 +159,6 @@ PuTTY : [M] terminal wcwidth ldiscucs logging be_all mac macdlg macevlog
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

119
mac/mac.c
View File

@ -1,4 +1,4 @@
/* $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.
@ -63,18 +63,6 @@
#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;
@ -773,32 +761,6 @@ void cleanup_exit(int status)
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;
@ -906,85 +868,6 @@ void platform_get_x11_auth(char *display, int *proto,
/* 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"

View File

@ -1,4 +1,4 @@
/* $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.
@ -41,11 +41,7 @@
/* 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
@ -814,54 +810,6 @@ resource 'ics8' (FREF_Seed) {
$"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
*/

160
mac/macmisc.c Normal file
View File

@ -0,0 +1,160 @@
/* $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:
*/

661
mac/macpgen.c Normal file
View File

@ -0,0 +1,661 @@
/* $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:
*/

437
mac/macpgen.r Normal file
View File

@ -0,0 +1,437 @@
/* $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."
};

44
mac/macpgrid.h Normal file
View File

@ -0,0 +1,44 @@
/* $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