mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-03 04:22:47 -05: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:
160
mac/macmisc.c
Normal file
160
mac/macmisc.c
Normal 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:
|
||||
*/
|
Reference in New Issue
Block a user