home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Garbo
/
Garbo.cdr
/
mac
/
source
/
tarsrc.sit
/
menu.c
< prev
next >
Wrap
Text File
|
1989-09-14
|
5KB
|
257 lines
/*
* Macintosh Tar
*
* Written by Craig Ruff.
*
* Menu handling routines.
*/
#include "tar.h"
#include <Resources.h>
/*
* Resource IDs for menus
*/
#define appleID 128
#define fileID 129
#define editID 130
#define optionID 131
/*
* Index for each menu
*/
#define appleMenu 0
#define fileMenu 1
#define editMenu 2
#define optionMenu 3
#define menuCount 4
/*
* Item in Apple Menu
*/
#define aboutItem 1
/*
* Items in File Menu
*/
#define createItem 1 /* Create archive */
#define extractItem 2 /* Extract archive */
#define listItem 3 /* List archive */
#define closeItem 5 /* Close (only for Desk Acc) */
#define pgsetItem 6 /* Page setup */
#define quitItem 8
/*
* Items in Edit Menu
*
* For use by Desk Accessories.
*/
#define undoItem 1
#define cutItem 3
#define copyItem 4
#define pasteItem 5
#define clearItem 6
/*
* Items in Options Menu
*/
#define convertItem 1 /* Convert newlines */
#define oldArchItem 2 /* Old tar compatible archive creation */
#define blockItem 3 /* Set block size */
#define pageItem 5 /* Control paging of screen listing */
#define printItem 6 /* Use printer instead of screen */
#define typeItem 8 /* Creator/Type dialog */
/*
* Menu related variables
*/
MenuHandle menus[menuCount];
Boolean menusOK;
/*
* MenuInit - set up menu bar
*
* Reads non-apple menus from resource file.
*/
Boolean
MenuInit() {
int i;
char *routine = "\pMenuInit";
if ((menus[appleMenu] = GetMenu(appleID)) == nil) {
OSAlert(routine, "\pGetMenu Apple Menu", nil, ResError());
return(true);
}
AddResMenu(menus[appleMenu], 'DRVR');
if ((menus[fileMenu] = GetMenu(fileID)) == nil) {
OSAlert(routine, "\pGetMenu File Menu", nil, ResError());
return(true);
}
if ((menus[editMenu] = GetMenu(editID)) == nil) {
OSAlert(routine, "\pGetMenu Edit Menu", nil, ResError());
return(true);
}
if ((menus[optionMenu] = GetMenu(optionID)) == nil) {
OSAlert(routine, "\pGetMenu Option Menu", nil, ResError());
return(true);
}
CheckItem(menus[optionMenu], pageItem, autoPage);
for (i = appleMenu; i < menuCount; i++)
InsertMenu(menus[i], 0);
DDaMenus();
DrawMenuBar();
return(false);
}
/*
* MenuCmd - handle a menu pick or keyboard equivalent
*/
MenuCmd(result)
long result;
{
WindowPeek wp;
short theItem = result & 0xffff;
short theMenu = (result >> 16) & 0xffff;
char name[256];
OSErr err;
char *routine = "\pMenuCmd";
GrafPtr savedPort;
switch (theMenu) {
case appleID:
if (theItem == aboutItem)
DoAboutBox();
else {
/*
* Oh boy, set up for a desk accessory.
*/
GetItem(menus[appleMenu], theItem, name);
GetPort(&savedPort);
if ((err = ZeroScrap()) != noErr) {
OSAlert(routine, "\pZeroScrap", nil, err);
break;
}
if ((err = TEToScrap()) != noErr) {
OSAlert(routine, "\pTEToScrap", nil, err);
break;
}
(void) OpenDeskAcc(name);
SetPort(savedPort);
if (FrontWindow() != nil) {
EDaMenus();
}
}
break;
case fileID:
switch (theItem) {
case createItem:
ArCreate();
break;
case extractItem:
Extract();
break;
case listItem:
List();
break;
case closeItem:
/*
* If the front window belongs to a Desk Acc, close it!
*/
if ((wp = (WindowPeek) FrontWindow()) == nil)
break;
if (wp->windowKind < 0) {
CloseDeskAcc(wp->windowKind);
DDaMenus();
}
break;
case pgsetItem:
if (!PrSetup())
(void) PrStlDialog(prRecHdl);
break;
case quitItem:
doneFlag = true;
break;
}
break;
case editID:
/*
* Send to a Desk Acc.
*/
(void) SystemEdit(theItem - 1);
break;
case optionID:
switch (theItem) {
case convertItem:
cvtNl ^= true;
CheckItem(menus[optionMenu], convertItem, cvtNl);
break;
case oldArchItem:
oldArch ^= true;
CheckItem(menus[optionMenu], oldArchItem, oldArch);
break;
case blockItem:
DoBlockSize();
break;
case pageItem:
autoPage ^= true;
CheckItem(menus[optionMenu], pageItem, autoPage);
break;
case printItem:
doPrint ^= true;
CheckItem(menus[optionMenu], printItem, doPrint);
break;
case typeItem:
DoCreatorType();
break;
}
break;
}
HiliteMenu(0);
FlushEvents(everyEvent, 0);
}
/*
* DDaMenus - disable Desk Acc specific menu and menu item
*/
DDaMenus() {
DisableItem(menus[editMenu], 0);
DisableItem(menus[fileMenu], closeItem);
DrawMenuBar();
menusOK = true;
}
/*
* EDaMenus - enable Desk Acc specific menu and menu item
*/
EDaMenus() {
EnableItem(menus[editMenu], 0);
EnableItem(menus[fileMenu], closeItem);
DrawMenuBar();
menusOK = false;
}