home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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;
- }
-