executor/packages/go/filemanip.c

224 lines
4.7 KiB
C

#include "go.h"
#include "xfer.h"
#include "sharedtransfer.proto.h"
#include "filemanip.proto.h"
#include "mouse.proto.h"
#include "window.proto.h"
#include "dircreate.proto.h"
#include "delete.proto.h"
#include "initdirs.proto.h"
#include "update.proto.h"
#include "misc.proto.h"
#include "launch.proto.h"
#include <string.h>
/* todo: move to .h file */
#define STDFILEWIDTH 304
void
newfolder (void)
{
Point pt;
SFReply reply;
long savecurdir;
short savesfsavedisk;
WindowPeek wp;
wp = (WindowPeek) FrontWindow ();
savecurdir = CurDirStore;
savesfsavedisk = SFSaveDisk;
if ((WindowPtr) wp != g_hotband && wp->windowKind == userKind)
{
CurDirStore = (*(opendirinfo **) wp->refCon)->iodirid;
SFSaveDisk = -(*(opendirinfo **) wp->refCon)->vrefnum;
}
#ifdef THINK_C
SetPt (&pt, (screenBits.bounds.right - screenBits.bounds.left - STDFILEWIDTH) / 2,
100);
SFPutFile (pt, (StringPtr) "\pNew Folder Name:", (StringPtr) "\pUntitled Folder",
(ProcPtr) 0, &reply);
#else
SetPt (&pt, (qd.screenBits.bounds.right - qd.screenBits.bounds.left - STDFILEWIDTH) / 2,
100);
SFPutFile (pt, (StringPtr) "\pNew Folder Name:", (StringPtr) "\pUntitled Folder",
(DlgHookUPP) 0, &reply);
#endif
if (reply.good)
{
#ifdef THINK_C
createdir (-SFSaveDisk, CurDirStore, reply.fName);
#else
createdir (-LMGetSFSaveDisk (), LMGetCurDirStore (), reply.fName);
#endif
#ifdef THINK_C
changewindow (reply.fName, CurDirStore, -SFSaveDisk, updatemove);
#else
changewindow (reply.fName, LMGetCurDirStore (), -LMGetSFSaveDisk (), updatemove);
#endif
}
CurDirStore = savecurdir;
SFSaveDisk = savesfsavedisk;
}
void
openitem (void)
{
if ((**g_selection)[0] != 0)
activateicon ((**g_selection)[0]);
}
void
printitem (void)
{
launchcreator ((**g_selection)[0], appPrint);
}
int
is_closable (WindowPtr wp)
{
return wp != g_hotband
&& ((WindowPeek) wp)->windowKind == userKind;
}
void
closeitem (void)
{
WindowPtr wp;
wp = FrontWindow ();
if (is_closable (wp))
disposedirwindow (wp);
}
void
saveitem (void)
{
/* todo */
}
void
undolast (void)
{
/* todo */
}
void
duplicatename (Str255 name)
{
/* todo: put in .h file */
#define MAXNAMELEN 31
#define SUFFIX " copy"
short i, j;
name[0] += sizeof (SUFFIX) -1;
if (name[0] > MAXNAMELEN)
name[0] = MAXNAMELEN;
for (i = name[0] - sizeof (SUFFIX) , j = 0; i <= name[0]; i++, j++)
name[i] = SUFFIX[j];
}
void
duplicate (void)
{
item **ih;
ControlHandle c;
Str255 newname;
unsigned char state;
c = (**g_selection)[0];
mystr255copy (newname, (*c)->contrlTitle);
duplicatename (newname);
ih = (item **) (*c)->contrlData;
state = HGetState ((Handle) c);
HLock ((Handle) c);
if (duplicate1file ((*ih)->vrefnum, (*ih)->vrefnum, (*ih)->ioparid,
(*ih)->ioparid, (*c)->contrlTitle, newname, true))
changewindow (newname, (*ih)->ioparid, (*ih)->vrefnum, updatemove);
HSetState ((Handle) c, state);
}
/* todo: move to .h file */
#define RENAMEDIALOGID 202
#define NEWNAMEITEM 3
void
renameselection (void)
{
Rect r;
item **ih;
short itemnum, type;
Handle itemh;
DialogPtr dp;
HParamBlockRec pb;
ControlHandle c;
OSErr e;
Str255 s;
unsigned char state;
dp = GetNewDialog (RENAMEDIALOGID, (Ptr) 0, (WindowPtr) - 1);
#ifdef THINK_C
ModalDialog ((ProcPtr) 0, &itemnum);
#else
ModalDialog ((ModalFilterUPP) 0, &itemnum);
#endif
if (itemnum == OK)
{
GetDItem (dp, NEWNAMEITEM, &type, &itemh, &r);
GetIText (itemh, s);
c = (**g_selection)[0];
ih = (item **) (*c)->contrlData;
state = HGetState ((Handle) c);
HLock ((Handle) c);
pb.ioParam.ioNamePtr = (*c)->contrlTitle;
pb.ioParam.ioMisc = (Ptr) s;
pb.ioParam.ioVRefNum = (*ih)->vrefnum;
pb.fileParam.ioDirID = (*ih)->ioparid;
e = PBHRename (&pb, false);
if (e == noErr)
{
if (is_volume (c))
s[++s[0]] = ':';
SetCTitle (c, s);
}
else
{
doerror (e, (StringPtr) "\pPBHRename");
}
HSetState ((Handle) c, state);
}
DisposDialog (dp);
}
void
deleteselection (void)
{
ControlHandle c;
item **ih;
short vrefnum;
long parid;
unsigned char state;
/* Don't worry about c being null because the menu choice would not have been
* hilit
*/
c = (**g_selection)[0];
if ((*c)->contrlOwner == g_hotband)
{
(**g_selection)[0] = 0;
removeitemfromhotband (c);
}
else
{
ih = (item **) (*c)->contrlData;
vrefnum = (*ih)->vrefnum;
parid = (*ih)->ioparid;
changehot (c, 0, 0);
(**g_selection)[0] = 0;
state = HGetState ((Handle) c);
HLock ((Handle) c);
if (delete1file (vrefnum, parid, (*c)->contrlTitle))
changewindow ((*c)->contrlTitle, parid, vrefnum, removefromlist);
HSetState ((Handle) c, state);
}
}