mirror of
https://github.com/ctm/executor.git
synced 2025-01-10 16:30:16 +00:00
878 lines
17 KiB
C
878 lines
17 KiB
C
#include "xfer.h"
|
|
|
|
#include <SetUpA4.h>
|
|
|
|
#define LONGTIME 216000 /* one hour */
|
|
|
|
#include "HFS_XFer.proto.h"
|
|
#include "sharedtransfer.proto.h"
|
|
#include "transferer.proto.h"
|
|
#include "renamer.proto.h"
|
|
#include "delete.proto.h"
|
|
|
|
#include "HFS_XFer.proto.h"
|
|
|
|
static init_ap_funcs (void);
|
|
static init_file_funcs (void);
|
|
static int strlen (char *p);
|
|
static init_ap_funcs (void);
|
|
static init_file_funcs (void);
|
|
static int strlen (char *p);
|
|
|
|
func ap_funcs[1];
|
|
|
|
static
|
|
init_ap_funcs (void)
|
|
{
|
|
ap_funcs[0].name = "\pAbout HFS_XFer...";
|
|
ap_funcs[0].ptr = about_HFS_XFer;
|
|
}
|
|
|
|
funcinfo file_funcs[] =
|
|
{
|
|
0, 0, 110, 30, 0,
|
|
0, 0, 28, 30, 0,
|
|
0, 0, 28, 30, 0,
|
|
0, 0, 28, 40, 0,
|
|
0, 0, 28, 40, 0,
|
|
0, 0, 28, 40, 0,
|
|
0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0
|
|
};
|
|
|
|
static
|
|
init_file_funcs (void)
|
|
{
|
|
file_funcs[0].name = "\pCopy Disk...";
|
|
file_funcs[0].dlgHook = copydiskhook;
|
|
file_funcs[0].prompt = "\pCopy Disk";
|
|
|
|
file_funcs[1].name = "\pMove Files...";
|
|
file_funcs[1].dlgHook = movefileshook;
|
|
file_funcs[1].prompt = "\pMove File or Folder";
|
|
|
|
file_funcs[2].name = "\pCopy Files...";
|
|
file_funcs[2].dlgHook = copyfileshook;
|
|
file_funcs[2].prompt = "\pCopy File or Folder";
|
|
|
|
file_funcs[3].name = "\pRename...";
|
|
file_funcs[3].dlgHook = renamefileshook;
|
|
file_funcs[3].prompt = "\pRename File or Folder";
|
|
|
|
file_funcs[4].name = "\pDelete...";
|
|
file_funcs[4].dlgHook = deletefileshook;
|
|
file_funcs[4].prompt = "\pDelete File or Folder";
|
|
|
|
file_funcs[5].name = "\pNew Folder...";
|
|
file_funcs[5].dlgHook = newdirhook;
|
|
file_funcs[5].prompt = "\pCreate New Folder";
|
|
|
|
file_funcs[6].name = "\p(-";
|
|
file_funcs[6].prompt = "\p";
|
|
|
|
file_funcs[7].name = "\pQuit/Q";
|
|
file_funcs[7].prompt = "\p";
|
|
}
|
|
|
|
func edit_funcs[4];
|
|
|
|
void
|
|
init_edit_funcs (void)
|
|
{
|
|
edit_funcs[0].name = "\p(Undo/Z";
|
|
edit_funcs[1].name = "\p(Cut/X";
|
|
edit_funcs[2].name = "\p(Copy/C";
|
|
edit_funcs[3].name = "\p(Paste/V";
|
|
}
|
|
|
|
void
|
|
init_all_tables (void)
|
|
{
|
|
init_ap_funcs ();
|
|
init_file_funcs ();
|
|
init_edit_funcs ();
|
|
}
|
|
|
|
LONGINT destdir;
|
|
INTEGER destdisk;
|
|
SFReply globalreply;
|
|
WindowPtr destdirwin;
|
|
TEHandle destdirname;
|
|
|
|
void
|
|
about_HFS_XFer (void)
|
|
{
|
|
Alert (ABOUTALERT, (ProcPtr) 0);
|
|
}
|
|
|
|
INTEGER
|
|
quitfunc (int rn)
|
|
{
|
|
CloseDeskAcc (rn);
|
|
return 0;
|
|
}
|
|
|
|
BOOLEAN
|
|
caneject (DialogPtr dp)
|
|
{
|
|
Rect r;
|
|
INTEGER type;
|
|
Handle h;
|
|
|
|
GetDItem (dp, getEject, &type, &h, &r);
|
|
return !(*(ControlHandle) h)->contrlHilite;
|
|
}
|
|
|
|
static int
|
|
strlen (char *p)
|
|
{
|
|
register int retval;
|
|
|
|
for (retval = 0; *p++; ++retval)
|
|
;
|
|
return retval;
|
|
}
|
|
|
|
void
|
|
setcurdestname (INTEGER disk, LONGINT dir)
|
|
{
|
|
CInfoPBRec hpb;
|
|
Str255 s;
|
|
INTEGER id;
|
|
Ptr ptr;
|
|
|
|
hpb.dirInfo.ioNamePtr = s;
|
|
hpb.dirInfo.ioVRefNum = disk;
|
|
hpb.dirInfo.ioFDirIndex = -1;
|
|
hpb.dirInfo.ioDrDirID = dir;
|
|
TESetText ((Ptr) 0, 0, destdirname);
|
|
do
|
|
{
|
|
PBGetCatInfo (&hpb, false);
|
|
/* insert name : */
|
|
TEInsert ((Ptr) s + 1, (LONGINT) s[0], destdirname);
|
|
TEInsert ((Ptr) ":", 1, destdirname);
|
|
TESetSelect (0, 0, destdirname);
|
|
id = hpb.dirInfo.ioDrDirID;
|
|
hpb.dirInfo.ioDrDirID = hpb.dirInfo.ioDrParID;
|
|
}
|
|
while (id != 2);
|
|
TESetSelect (32767, 32767, destdirname);
|
|
/* TESelView(destdirname); */
|
|
/* TODO: change this to a drawtext */
|
|
ptr = (Ptr) "Current Destination";
|
|
TextFace (bold);
|
|
MoveTo ((destdirwin->portRect.right + destdirwin->portRect.left -
|
|
TextWidth (ptr, 0, strlen ((char *) ptr))) / 2, 12);
|
|
DrawText (ptr, 0, strlen ((char *) ptr));
|
|
}
|
|
|
|
void
|
|
updatedestwin (INTEGER disk, LONGINT dir)
|
|
{
|
|
GrafPtr saveport;
|
|
|
|
GetPort (&saveport);
|
|
SetPort (destdirwin);
|
|
BeginUpdate (destdirwin);
|
|
EraseRect (&destdirwin->portRect);
|
|
setcurdestname (disk, dir);
|
|
TEUpdate (&destdirwin->portRect, destdirname);
|
|
EndUpdate (destdirwin);
|
|
SetPort (saveport);
|
|
}
|
|
|
|
pascal BOOLEAN
|
|
visiblefilesonly (ParmBlkPtr p)
|
|
{
|
|
BOOLEAN retval;
|
|
|
|
retval = !!(p->fileParam.ioFlFndrInfo.fdFlags & fInvisible);
|
|
return retval;
|
|
}
|
|
|
|
pascal BOOLEAN
|
|
myfilterproc (DialogPtr dp, EventRecord * event, INTEGER * item)
|
|
{
|
|
Rect r;
|
|
INTEGER type;
|
|
Handle h;
|
|
Str255 s;
|
|
|
|
SetUpA4 ();
|
|
GetDItem (dp, TEXTITEM, &type, &h, &r);
|
|
if (!(type & itemDisable))
|
|
{
|
|
GetIText (h, s);
|
|
GetDItem (dp, ACTIONBUTTON, &type, &h, &r);
|
|
if (s[0] == 0)
|
|
HiliteControl ((ControlHandle) h, 255);
|
|
else
|
|
HiliteControl ((ControlHandle) h, 0);
|
|
}
|
|
GetDItem (dp, getOpen, &type, &h, &r);
|
|
if (globalreply.fType != 0)
|
|
HiliteControl ((ControlHandle) h, 0);
|
|
else
|
|
HiliteControl ((ControlHandle) h, 255);
|
|
switch (event->what)
|
|
{
|
|
case keyDown:
|
|
if ((event->message & 0xFF) == '\r' && globalreply.fType != 0)
|
|
{
|
|
if (((DialogPeek) dp)->editField == -1)
|
|
*item = getOpen;
|
|
else
|
|
*item = ACTIONBUTTON;
|
|
RestoreA4 ();
|
|
/*-->*/ return true;
|
|
}
|
|
else if ((event->message & 0xFF) == '.' &&
|
|
(event->modifiers & cmdKey))
|
|
{
|
|
*item = Cancel;
|
|
RestoreA4 ();
|
|
/*-->*/ return true;
|
|
}
|
|
break;
|
|
case updateEvt:
|
|
if ((WindowPtr) event->message == destdirwin)
|
|
updatedestwin (-destdisk, destdir);
|
|
break;
|
|
}
|
|
RestoreA4 ();
|
|
return false;
|
|
}
|
|
|
|
INTEGER
|
|
dodelete (DialogPtr dp)
|
|
{
|
|
Str255 sp;
|
|
LONGINT fromdirid;
|
|
|
|
getnameandfromdirid (&sp, &fromdirid);
|
|
delete1file (-SFSaveDisk, fromdirid, sp);
|
|
return 101;
|
|
}
|
|
|
|
INTEGER
|
|
dorename (DialogPtr dp)
|
|
{
|
|
renamefile (dp);
|
|
return 101;
|
|
}
|
|
|
|
INTEGER
|
|
docopy (DialogPtr dp)
|
|
{
|
|
dotransfer (copy1file);
|
|
return 0;
|
|
}
|
|
|
|
INTEGER
|
|
domove (DialogPtr dp)
|
|
{
|
|
dotransfer (move1file);
|
|
return 101;
|
|
}
|
|
|
|
void
|
|
invaldestwin (void)
|
|
{
|
|
GrafPtr saveport;
|
|
|
|
GetPort (&saveport);
|
|
SetPort (destdirwin);
|
|
InvalRect (&destdirwin->portRect);
|
|
SetPort (saveport);
|
|
}
|
|
|
|
pascal Boolean
|
|
dirsfilter (DialogPtr dp, EventRecord * ep, INTEGER * itemhit)
|
|
{
|
|
static INTEGER currentdisk;
|
|
|
|
SetUpA4 ();
|
|
if (currentdisk != SFSaveDisk)
|
|
{
|
|
invaldestwin ();
|
|
currentdisk = SFSaveDisk;
|
|
}
|
|
switch (ep->what)
|
|
{
|
|
case keyDown:
|
|
if ((ep->message & 0xFF) == '\r')
|
|
{
|
|
*itemhit = getOpen;
|
|
RestoreA4 ();
|
|
/*-->*/ return true;
|
|
}
|
|
break;
|
|
case nullEvent:
|
|
*itemhit = 100;
|
|
RestoreA4 ();
|
|
/*-->*/ return true;
|
|
case updateEvt:
|
|
if ((WindowPtr) ep->message == destdirwin)
|
|
{
|
|
updatedestwin (-SFSaveDisk, CurDirStore);
|
|
currentdisk = SFSaveDisk;
|
|
}
|
|
break;
|
|
}
|
|
RestoreA4 ();
|
|
return false;
|
|
}
|
|
|
|
pascal INTEGER
|
|
DirDlgHook (INTEGER itemhit, DialogPtr dp)
|
|
{
|
|
static INTEGER needupdate = true;
|
|
|
|
SetUpA4 ();
|
|
if (needupdate)
|
|
{
|
|
invaldestwin ();
|
|
needupdate = false;
|
|
}
|
|
if (itemhit != 100)
|
|
needupdate = true;
|
|
RestoreA4 ();
|
|
if (itemhit == SELECTBUTTON)
|
|
return getOpen;
|
|
else
|
|
return itemhit;
|
|
}
|
|
|
|
void
|
|
getnewdest (void)
|
|
{
|
|
SFReply reply;
|
|
SFTypeList tl;
|
|
LONGINT savedestdir, dir;
|
|
INTEGER disk, savedestdisk;
|
|
Point where;
|
|
HParamBlockRec pb;
|
|
Rect r;
|
|
|
|
disk = SFSaveDisk;
|
|
dir = CurDirStore;
|
|
savedestdisk = SFSaveDisk = destdisk;
|
|
savedestdir = CurDirStore = destdir;
|
|
|
|
tl[0] = 0x7B2A265E;
|
|
tl[1] = 0x00000000;
|
|
tl[2] = 0x00000000;
|
|
tl[3] = 0x00000000;
|
|
SetPt (&where, 82, 40);
|
|
SFPGetFile (where, (StringPtr) "\pSelect Directory",
|
|
(ProcPtr) visiblefilesonly, 1, tl, (ProcPtr) DirDlgHook, &reply,
|
|
DIRSONLYDLG, (ProcPtr) dirsfilter);
|
|
/*
|
|
* the jobberattop is messed up on the mac after the SFPGetFile call.
|
|
* TODO: fix it.
|
|
*/
|
|
if (reply.good)
|
|
{
|
|
destdisk = SFSaveDisk;
|
|
destdir = CurDirStore;
|
|
}
|
|
else
|
|
{
|
|
pb.volumeParam.ioVolIndex = 0;
|
|
pb.volumeParam.ioNamePtr = 0;
|
|
pb.volumeParam.ioCompletion = 0;
|
|
pb.volumeParam.ioVRefNum = -savedestdisk;
|
|
if (PBHGetVInfo (&pb, false) == noErr && pb.volumeParam.ioVDrvInfo != 0)
|
|
{
|
|
destdisk = savedestdisk;
|
|
destdir = savedestdir;
|
|
invaldestwin ();
|
|
}
|
|
else
|
|
{
|
|
destdisk = SFSaveDisk;
|
|
destdir = CurDirStore;
|
|
}
|
|
}
|
|
SFSaveDisk = disk;
|
|
CurDirStore = dir;
|
|
updatedestwin (-destdisk, destdir);
|
|
}
|
|
|
|
INTEGER
|
|
hookcommon (INTEGER item, DialogPtr dp, INTEGER (*pp) (DialogPtr dp))
|
|
{
|
|
INTEGER retval;
|
|
static INTEGER needtoupdatedestdisk;
|
|
|
|
if (needtoupdatedestdisk)
|
|
{
|
|
needtoupdatedestdisk = false;
|
|
destdisk = SFSaveDisk;
|
|
destdir = CurDirStore;
|
|
invaldestwin ();
|
|
}
|
|
retval = 0;
|
|
switch (item)
|
|
{
|
|
case -1:
|
|
invaldestwin ();
|
|
break;
|
|
case ACTIONBUTTON:
|
|
retval = (*pp) (dp);
|
|
break;
|
|
case NEWDESTBUTTON:
|
|
getnewdest ();
|
|
break;
|
|
case getOpen:
|
|
retval = 100;
|
|
break;
|
|
case getEject:
|
|
if (destdisk == SFSaveDisk)
|
|
needtoupdatedestdisk = true;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return retval ? retval : item;
|
|
}
|
|
|
|
void
|
|
hideitem (DialogPtr dp, INTEGER item)
|
|
{
|
|
Handle h;
|
|
Rect r;
|
|
INTEGER type;
|
|
|
|
GetDItem (dp, item, &type, &h, &r);
|
|
if (type & ctrlItem)
|
|
{
|
|
HideControl ((ControlHandle) h);
|
|
/*-->*/ return;
|
|
}
|
|
if (type == editText)
|
|
{
|
|
((DialogPeek) dp)->editField = -1;
|
|
SizeWindow (dp, dp->portRect.right - dp->portRect.left, 220, true);
|
|
}
|
|
OffsetRect (&r, 8000, 8000);
|
|
type += itemDisable;
|
|
SetDItem (dp, item, type, h, &r);
|
|
}
|
|
|
|
void
|
|
setactionbutton (DialogPtr dp, Str255 title)
|
|
{
|
|
Handle h;
|
|
Rect r;
|
|
INTEGER type;
|
|
|
|
GetDItem (dp, ACTIONBUTTON, &type, &h, &r);
|
|
SetCTitle ((ControlHandle) h, title);
|
|
}
|
|
|
|
void
|
|
myShowWindow (WindowPtr wp)
|
|
{
|
|
#if 0
|
|
BringToFront (wp);
|
|
#endif /* 0 */
|
|
ShowWindow (wp);
|
|
updatedestwin (-destdisk, destdir);
|
|
}
|
|
|
|
pascal INTEGER
|
|
copyfileshook (INTEGER item, DialogPtr dp)
|
|
{
|
|
INTEGER retval;
|
|
|
|
SetUpA4 ();
|
|
abortflag = false;
|
|
if (item == -1)
|
|
{
|
|
myShowWindow (destdirwin);
|
|
hideitem (dp, TEXTITEM);
|
|
setactionbutton (dp, (StringPtr) "\pCopy");
|
|
}
|
|
retval = hookcommon (item, dp, docopy);
|
|
RestoreA4 ();
|
|
return retval;
|
|
}
|
|
|
|
pascal INTEGER
|
|
copydiskhook (INTEGER item, DialogPtr dp)
|
|
{
|
|
INTEGER retval;
|
|
|
|
SetUpA4 ();
|
|
abortflag = false;
|
|
if (item == -1)
|
|
{
|
|
myShowWindow (destdirwin);
|
|
SetOrigin (240, 0);
|
|
SizeWindow (dp, 250, dp->portRect.bottom - dp->portRect.top, true);
|
|
setactionbutton (dp, (StringPtr) "\pCopy");
|
|
hideitem (dp, getOpen);
|
|
hideitem (dp, TEXTITEM);
|
|
}
|
|
retval = hookcommon (item, dp, docopydisk);
|
|
RestoreA4 ();
|
|
return retval;
|
|
}
|
|
|
|
pascal INTEGER
|
|
movefileshook (INTEGER item, DialogPtr dp)
|
|
{
|
|
INTEGER retval;
|
|
|
|
SetUpA4 ();
|
|
abortflag = false;
|
|
if (item == -1)
|
|
{
|
|
myShowWindow (destdirwin);
|
|
setactionbutton (dp, (StringPtr) "\pMove");
|
|
hideitem (dp, TEXTITEM);
|
|
}
|
|
retval = hookcommon (item, dp, domove);
|
|
RestoreA4 ();
|
|
return retval;
|
|
}
|
|
|
|
pascal INTEGER
|
|
newdirhook (INTEGER item, DialogPtr dp)
|
|
{
|
|
Handle h;
|
|
INTEGER type;
|
|
Rect r;
|
|
INTEGER retval;
|
|
|
|
SetUpA4 ();
|
|
abortflag = false;
|
|
if (item == -1)
|
|
{
|
|
setactionbutton (dp, (StringPtr) "\pCreate");
|
|
GetDItem (dp, TEXTITEM, &type, &h, &r);
|
|
SetIText (h, (StringPtr) "\pNewFolder");
|
|
SelIText (dp, TEXTITEM, 0, 32767);
|
|
hideitem (dp, NEWDESTBUTTON);
|
|
hideitem (dp, DESTNAME);
|
|
}
|
|
retval = hookcommon (item, dp, donewdir);
|
|
RestoreA4 ();
|
|
return retval;
|
|
}
|
|
|
|
pascal INTEGER
|
|
renamefileshook (INTEGER item, DialogPtr dp)
|
|
{
|
|
Handle h;
|
|
INTEGER type;
|
|
Rect r;
|
|
INTEGER retval;
|
|
|
|
SetUpA4 ();
|
|
abortflag = false;
|
|
if (item == -1)
|
|
{
|
|
setactionbutton (dp, (StringPtr) "\pRename");
|
|
GetDItem (dp, TEXTITEM, &type, &h, &r);
|
|
SetIText (h, (StringPtr) "\p");
|
|
hideitem (dp, NEWDESTBUTTON);
|
|
hideitem (dp, DESTNAME);
|
|
}
|
|
retval = hookcommon (item, dp, dorename);
|
|
RestoreA4 ();
|
|
return retval;
|
|
}
|
|
|
|
pascal INTEGER
|
|
deletefileshook (INTEGER item, DialogPtr dp)
|
|
{
|
|
INTEGER retval;
|
|
|
|
SetUpA4 ();
|
|
abortflag = false;
|
|
if (item == -1)
|
|
{
|
|
setactionbutton (dp, (StringPtr) "\pDelete");
|
|
hideitem (dp, NEWDESTBUTTON);
|
|
hideitem (dp, DESTNAME);
|
|
hideitem (dp, TEXTITEM);
|
|
}
|
|
retval = hookcommon (item, dp, dodelete);
|
|
RestoreA4 ();
|
|
return retval;
|
|
}
|
|
|
|
Handle savembar, ourmbar;
|
|
|
|
void
|
|
init (int rn, DialogPtr * ourwindowp)
|
|
{
|
|
INTEGER i, itemtype;
|
|
Handle itemhand;
|
|
Rect itemrect;
|
|
|
|
Rect r;
|
|
DialogPtr startdp;
|
|
|
|
#if 0
|
|
InitGraf ((Ptr) & thePort);
|
|
InitWindows ();
|
|
InitFonts ();
|
|
InitMenus ();
|
|
InitCursor ();
|
|
InitDialogs ((ProcPtr) 0);
|
|
TEInit ();
|
|
|
|
#endif
|
|
#if 0
|
|
/* #define EXCELBITESUS */
|
|
#if defined(EXCELBITESUS)
|
|
savembar = MenuList;
|
|
SetMenuBar (GetMenuBar ());
|
|
#else
|
|
savembar = GetMenuBar ();
|
|
#endif
|
|
ClearMenuBar ();
|
|
|
|
drvrmenu = NewMenu (DRVR (ourid, 0), (StringPtr) "\p\023");
|
|
for (i = 0; i < NELEM (ap_funcs); i++)
|
|
AppendMenu (drvrmenu, (StringPtr) ap_funcs[i].name);
|
|
InsertMenu (drvrmenu, 0);
|
|
|
|
editmenu = NewMenu (DRVR (ourid, 2), (StringPtr) "\pEdit");
|
|
for (i = 0; i < NELEM (edit_funcs); i++)
|
|
AppendMenu (editmenu, (StringPtr) edit_funcs[i].name);
|
|
InsertMenu (editmenu, 0);
|
|
ourmbar = GetMenuBar ();
|
|
MBarEnable = rn;
|
|
|
|
DrawMenuBar ();
|
|
#endif
|
|
|
|
startdp = GetNewDialog (STARTALERT, (Ptr) 0, (WindowPtr) - 1);
|
|
((WindowPeek) startdp)->windowKind = rn;
|
|
*ourwindowp = startdp;
|
|
|
|
GetDItem (startdp, NEW_VOLUME_ITEM, &itemtype, &itemhand, &itemrect);
|
|
HiliteControl ((ControlHandle) itemhand, 255);
|
|
|
|
verify_flags = 0;
|
|
for (i = FIRST_VERIFY_ITEM; i <= LAST_VERIFY_ITEM; ++i)
|
|
{
|
|
GetDItem (startdp, i, &itemtype, &itemhand, &itemrect);
|
|
SetCtlValue ((ControlHandle) itemhand, 1);
|
|
verify_flags |= ITEM_TO_BIT (i);
|
|
}
|
|
|
|
destdir = CurDirStore;
|
|
destdisk = SFSaveDisk;
|
|
destdirwin = GetNewWindow (DESTDIRWINID, (Ptr) 0, (WindowPtr) - 1);
|
|
((WindowPeek) destdirwin)->windowKind = rn;
|
|
SetPort (destdirwin);
|
|
r = destdirwin->portRect;
|
|
InsetRect (&r, 4, 8);
|
|
OffsetRect (&r, 0, 8);
|
|
destdirname = TENew (&r, &r);
|
|
TEAutoView (true, destdirname);
|
|
(*destdirname)->txSize = 12;
|
|
}
|
|
|
|
void
|
|
doitem (long choice, int rn)
|
|
{
|
|
Str255 apname;
|
|
funcinfo *infop;
|
|
Point pt;
|
|
|
|
switch (HiWord (choice) - DRVR (ourid, 0))
|
|
{
|
|
case 0:
|
|
if (LoWord (choice) <= NELEM (ap_funcs))
|
|
{
|
|
(*ap_funcs[LoWord (choice) - 1].ptr) ();
|
|
}
|
|
else
|
|
{
|
|
#if 0
|
|
GetItem (drvrmenu, LoWord (choice), (StringPtr) & apname);
|
|
OpenDeskAcc (apname);
|
|
#endif
|
|
}
|
|
break;
|
|
case 1:
|
|
infop = file_funcs + LoWord (choice) - 1;
|
|
SetPt (&pt, infop->h, infop->v);
|
|
if (infop->dlgHook == 0)
|
|
quitfunc (rn);
|
|
else
|
|
SFPGetFile (pt, (StringPtr) infop->prompt,
|
|
(ProcPtr) visiblefilesonly, -1, 0,
|
|
(ProcPtr) infop->dlgHook, &globalreply,
|
|
XFERDLGID, (ProcPtr) myfilterproc);
|
|
HideWindow (destdirwin);
|
|
break;
|
|
case 2:
|
|
(*edit_funcs[LoWord (choice) - 1].ptr) ();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
short ourid;
|
|
|
|
int
|
|
main (cntrlParam * pb, DCtlPtr dctlp, int n)
|
|
{
|
|
static int beenhere = 0;
|
|
EventRecord *evtp;
|
|
long mitem;
|
|
WindowPtr winp;
|
|
WDPBRec wd;
|
|
DialogPtr dp;
|
|
INTEGER item, itemtype, val;
|
|
Handle itemhand;
|
|
Rect itemrect;
|
|
typedef enum
|
|
{
|
|
OpenSel,
|
|
PrimeSel,
|
|
ControlSel,
|
|
StatusSel,
|
|
CloseSel
|
|
}
|
|
think_sel_t; /* See Think C p. 78 */
|
|
|
|
ourid = -(dctlp->dCtlRefNum + 1);
|
|
RememberA4 ();
|
|
init_all_tables (); /* has to be done with every call because
|
|
the pointers to functions can move */
|
|
switch (n)
|
|
{
|
|
case OpenSel:
|
|
if (!beenhere)
|
|
{
|
|
beenhere = 1;
|
|
init (dctlp->dCtlRefNum, &dctlp->dCtlWindow);
|
|
#if 0
|
|
dctlp->dCtlMenu = dctlp->dCtlRefNum;
|
|
#endif
|
|
}
|
|
break;
|
|
case PrimeSel:
|
|
break;
|
|
case ControlSel:
|
|
if (pb->csCode == accEvent)
|
|
{
|
|
evtp = *(EventRecord **) pb->csParam;
|
|
if (evtp->what == activateEvt)
|
|
{
|
|
if (evtp->modifiers & activeFlag)
|
|
{
|
|
if (MBarEnable != dctlp->dCtlRefNum)
|
|
{
|
|
#if 0
|
|
SetMenuBar (ourmbar);
|
|
DrawMenuBar ();
|
|
MBarEnable = dctlp->dCtlRefNum;
|
|
#endif
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (MBarEnable == dctlp->dCtlRefNum)
|
|
{
|
|
#if 0
|
|
SetMenuBar (savembar);
|
|
DrawMenuBar ();
|
|
MBarEnable = 0;
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
if (evtp->what != keyDown)
|
|
{
|
|
if ((WindowPtr) evtp->message != destdirwin
|
|
&& DialogSelect (evtp, &dp, &item))
|
|
{
|
|
switch (item)
|
|
{
|
|
case NEW_VOLUME_ITEM:
|
|
/* FALL THROUGH */
|
|
case COPY_DISK_ITEM:
|
|
case MOVE_FILE_ITEM:
|
|
case COPY_FILE_ITEM:
|
|
case RENAME_FILE_ITEM:
|
|
case DELETE_FILE_ITEM:
|
|
case NEW_FOLDER_ITEM:
|
|
doitem (((1L + DRVR (ourid, 0)) << 16) | (item - COPY_DISK_ITEM + 1),
|
|
dctlp->dCtlRefNum);
|
|
break;
|
|
|
|
case VERIFY_OVERWRITE_FILE_ITEM:
|
|
case VERIFY_OVERWRITE_FOLDER_ITEM:
|
|
case VERIFY_DELETE_FILE_ITEM:
|
|
case VERIFY_DELETE_FOLDER_ITEM:
|
|
GetDItem (dp, item, &itemtype, &itemhand, &itemrect);
|
|
val = 1 ^ GetCtlValue ((ControlHandle) itemhand);
|
|
SetCtlValue ((ControlHandle) itemhand, val);
|
|
if (val)
|
|
verify_flags |= ITEM_TO_BIT (item);
|
|
else
|
|
verify_flags &= ~ITEM_TO_BIT (item);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (evtp->what)
|
|
{
|
|
case mouseDown:
|
|
break;
|
|
case keyDown:
|
|
if (evtp->modifiers & cmdKey)
|
|
{
|
|
#if 0
|
|
mitem = MenuKey (evtp->message & 0xFF);
|
|
doitem (mitem, dctlp->dCtlRefNum);
|
|
HiliteMenu (0);
|
|
#endif
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (pb->csCode == accMenu)
|
|
{
|
|
#if 0
|
|
mitem = *(long *) pb->csParam;
|
|
doitem (mitem, dctlp->dCtlRefNum);
|
|
HiliteMenu (0);
|
|
#endif
|
|
}
|
|
break;
|
|
case StatusSel:
|
|
break;
|
|
case CloseSel:
|
|
#if 0
|
|
SetMenuBar (savembar);
|
|
DrawMenuBar ();
|
|
MBarEnable = 0;
|
|
#endif
|
|
DisposDialog (dctlp->dCtlWindow);
|
|
#if 0
|
|
DisposHandle (ourmbar);
|
|
DisposHandle (savembar);
|
|
#endif
|
|
dctlp->dCtlWindow = 0;
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|