which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5403 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			737 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			737 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
#define UNZIP_INTERNAL
 | 
						|
#include "unzip.h"
 | 
						|
#include "version.h"
 | 
						|
 | 
						|
#include <Traps.h>
 | 
						|
#include <Values.h>
 | 
						|
 | 
						|
char UnzipVersion[32], ZipinfoVersion[32];
 | 
						|
 | 
						|
void MacFSTest (int);
 | 
						|
void ResolveMacVol (short, short *, long *, StringPtr);
 | 
						|
 | 
						|
void screenOpen(char *);
 | 
						|
void screenControl(char *, int);
 | 
						|
void screenClose(void);
 | 
						|
 | 
						|
#define aboutAlert      128
 | 
						|
 | 
						|
#define selectDialog    129
 | 
						|
#define okItem          1
 | 
						|
#define cancelItem      2
 | 
						|
#define editItem        3
 | 
						|
#define staticItem      4
 | 
						|
 | 
						|
#define unzipMenuBar    128
 | 
						|
 | 
						|
#define appleMenu       128
 | 
						|
#define aboutItem       1
 | 
						|
 | 
						|
#define fileMenu        129
 | 
						|
#define extractItem     1
 | 
						|
#define infoItem        2
 | 
						|
#define listItem        3
 | 
						|
#define testItem        4
 | 
						|
#define commentItem     6
 | 
						|
#define freshenItem     8
 | 
						|
#define updateItem      9
 | 
						|
#define quitItem        11
 | 
						|
 | 
						|
#define editMenu        130
 | 
						|
#define cutItem         1
 | 
						|
#define copyItem        2
 | 
						|
#define pasteItem       3
 | 
						|
 | 
						|
#define modifierMenu    131
 | 
						|
#define excludeItem     1
 | 
						|
#define selectItem      2
 | 
						|
#define quietItem       9
 | 
						|
#define verboseItem     10
 | 
						|
 | 
						|
#define screenMenu      132
 | 
						|
#define pauseItem       1
 | 
						|
#define scrollItem      2
 | 
						|
 | 
						|
#define extractMenu     133
 | 
						|
#define screenItem      3
 | 
						|
#define junkItem        5
 | 
						|
 | 
						|
#define caseMenu        134
 | 
						|
#define insensitiveItem 1
 | 
						|
#define lowercaseItem   2
 | 
						|
 | 
						|
#define convertMenu     135
 | 
						|
#define autoItem        1
 | 
						|
#define binaryItem      2
 | 
						|
#define textItem        3
 | 
						|
 | 
						|
#define overwriteMenu   136
 | 
						|
#define alwaysItem      1
 | 
						|
#define neverItem       2
 | 
						|
#define promptItem      3
 | 
						|
 | 
						|
#define infoMenu        137
 | 
						|
#define prtCommentItem  2
 | 
						|
#define prtHeaderItem   3
 | 
						|
#define prtTotalsItem   4
 | 
						|
 | 
						|
#define formatMenu      138
 | 
						|
#define filenameItem    1
 | 
						|
#define longItem        2
 | 
						|
#define mediumItem      3
 | 
						|
#define shortItem       4
 | 
						|
 | 
						|
long modifiers, modifierMask;
 | 
						|
 | 
						|
#define allFlags        0x000FFFFF
 | 
						|
 | 
						|
#define quietFlag       0x00000001
 | 
						|
#define verboseFlag     0x00000002
 | 
						|
 | 
						|
#define pauseFlag       0x00080000
 | 
						|
#define scrollFlag      0x00040000
 | 
						|
 | 
						|
#define screenFlag      0x00000004
 | 
						|
#define junkFlag        0x00000008
 | 
						|
 | 
						|
#define insensitiveFlag 0x00000010
 | 
						|
#define lowercaseFlag   0x00000020
 | 
						|
 | 
						|
#define autoFlag        0x00000040
 | 
						|
#define textFlag        0x00000080
 | 
						|
 | 
						|
#define neverFlag       0x00000100
 | 
						|
#define overwriteFlag   0x00000200
 | 
						|
 | 
						|
#define prtCommentFlag  0x00000400
 | 
						|
#define prtHeaderFlag   0x00000800
 | 
						|
#define prtTotalsFlag   0x00001000
 | 
						|
 | 
						|
#define filenameFlag    0x00002000
 | 
						|
#define longFlag        0x00004000
 | 
						|
#define mediumFlag      0x00008000
 | 
						|
#define shortFlag       0x00010000
 | 
						|
 | 
						|
#define extractMask     0x000003FD
 | 
						|
#define infoMask        0x0001FE02
 | 
						|
#define listMask        0x00000001
 | 
						|
#define testMask        0x00000001
 | 
						|
#define commentMask     0x00000000
 | 
						|
#define freshenMask     0x000003FD
 | 
						|
#define updateMask      0x000003FD
 | 
						|
 | 
						|
EventRecord myevent;
 | 
						|
MenuHandle appleHandle, modifierHandle, screenHandle, extractHandle;
 | 
						|
MenuHandle caseHandle, convertHandle, overwriteHandle, infoHandle;
 | 
						|
MenuHandle formatHandle;
 | 
						|
Handle menubar, itemHandle;
 | 
						|
short itemType;
 | 
						|
Rect itemRect;
 | 
						|
 | 
						|
char command, fileList[256];
 | 
						|
 | 
						|
Boolean stop;
 | 
						|
 | 
						|
SysEnvRec sysRec;
 | 
						|
 | 
						|
char *macgetenv(s) char *s; {
 | 
						|
    if (s == NULL) return(fileList);
 | 
						|
    return(NULL);
 | 
						|
}
 | 
						|
 | 
						|
Boolean TrapAvailable(machineType, trapNumber, trapType)
 | 
						|
short machineType;
 | 
						|
short trapNumber;
 | 
						|
TrapType trapType;
 | 
						|
{
 | 
						|
    if (machineType < 0)
 | 
						|
        return (false);
 | 
						|
 | 
						|
    if ((trapType == ToolTrap) &&
 | 
						|
        (machineType > envMachUnknown) &&
 | 
						|
        (machineType < envMacII)) {
 | 
						|
        if ((trapNumber &= 0x03FF) > 0x01FF)
 | 
						|
            trapNumber = _Unimplemented;
 | 
						|
    }
 | 
						|
    return (NGetTrapAddress(trapNumber, trapType) !=
 | 
						|
        GetTrapAddress(_Unimplemented));
 | 
						|
}
 | 
						|
 | 
						|
void domenu(menucommand) long menucommand;
 | 
						|
{
 | 
						|
    short themenu, theitem;
 | 
						|
    DialogPtr thedialog;
 | 
						|
    Str255 name;
 | 
						|
    long check;
 | 
						|
 | 
						|
    themenu = HiWord(menucommand);
 | 
						|
    theitem = LoWord(menucommand);
 | 
						|
 | 
						|
    switch (themenu) {
 | 
						|
 | 
						|
    case appleMenu:
 | 
						|
        if (theitem == aboutItem) {
 | 
						|
            ParamText((StringPtr)UnzipVersion, (StringPtr)ZipinfoVersion, nil, nil);
 | 
						|
            Alert(aboutAlert, nil);
 | 
						|
        } else {
 | 
						|
            GetItem(appleHandle, theitem, name);
 | 
						|
            theitem = OpenDeskAcc(name);
 | 
						|
        }
 | 
						|
        break;
 | 
						|
 | 
						|
    case fileMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case extractItem:
 | 
						|
            if (modifiers & screenFlag)
 | 
						|
                command = 'c';
 | 
						|
            else
 | 
						|
                command = 'x';
 | 
						|
            modifierMask = extractMask;
 | 
						|
            break;
 | 
						|
        case infoItem:
 | 
						|
            command = 'Z';
 | 
						|
            modifierMask = infoMask;
 | 
						|
            break;
 | 
						|
        case listItem:
 | 
						|
            if (modifiers & verboseFlag)
 | 
						|
                command = 'v';
 | 
						|
            else
 | 
						|
                command = 'l';
 | 
						|
            modifierMask = listMask;
 | 
						|
            break;
 | 
						|
        case testItem:
 | 
						|
            command = 't';
 | 
						|
            modifierMask = testMask;
 | 
						|
            break;
 | 
						|
        case commentItem:
 | 
						|
            command = 'z';
 | 
						|
            modifierMask = commentMask;
 | 
						|
            break;
 | 
						|
        case freshenItem:
 | 
						|
            command = 'f';
 | 
						|
            modifierMask = freshenMask;
 | 
						|
            break;
 | 
						|
        case updateItem:
 | 
						|
            command = 'u';
 | 
						|
            modifierMask = updateMask;
 | 
						|
            break;
 | 
						|
        case quitItem:
 | 
						|
            stop = true;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        break;
 | 
						|
 | 
						|
    case editMenu:
 | 
						|
        break;
 | 
						|
 | 
						|
    case modifierMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case excludeItem:
 | 
						|
            check = -1;
 | 
						|
            break;
 | 
						|
        case selectItem:
 | 
						|
            thedialog = GetNewDialog(selectDialog, nil, (WindowPtr)(-1));
 | 
						|
            SetPort(thedialog);
 | 
						|
            do
 | 
						|
                ModalDialog(nil, &theitem);
 | 
						|
            while ((theitem != okItem) && (theitem != cancelItem));
 | 
						|
            if (theitem == okItem) {
 | 
						|
                GetDItem(thedialog, editItem, &itemType, &itemHandle, &itemRect);
 | 
						|
                GetIText(itemHandle, (StringPtr)&fileList);
 | 
						|
                p2cstr(fileList);
 | 
						|
            }
 | 
						|
            DisposDialog(thedialog);
 | 
						|
            check = -1;
 | 
						|
            break;
 | 
						|
        case quietItem:
 | 
						|
            check = (modifiers ^= quietFlag) & quietFlag;
 | 
						|
            break;
 | 
						|
        case verboseItem:
 | 
						|
            check = (modifiers ^= verboseFlag) & verboseFlag;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (check == 0)
 | 
						|
            CheckItem(modifierHandle, theitem, false);
 | 
						|
        else if (check > 0)
 | 
						|
            CheckItem(modifierHandle, theitem, true);
 | 
						|
        break;
 | 
						|
 | 
						|
    case screenMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case pauseItem:
 | 
						|
            check = (modifiers ^= pauseFlag) & pauseFlag;
 | 
						|
            screenControl("p", check);
 | 
						|
            break;
 | 
						|
        case scrollItem:
 | 
						|
            check = (modifiers ^= scrollFlag) & scrollFlag;
 | 
						|
            screenControl("s", check);
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (check == 0)
 | 
						|
            CheckItem(screenHandle, theitem, false);
 | 
						|
        else if (check > 0)
 | 
						|
            CheckItem(screenHandle, theitem, true);
 | 
						|
        break;
 | 
						|
 | 
						|
    case extractMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case screenItem:
 | 
						|
            check = (modifiers ^= screenFlag) & screenFlag;
 | 
						|
            break;
 | 
						|
        case junkItem:
 | 
						|
            check = (modifiers ^= junkFlag) & junkFlag;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (check == 0)
 | 
						|
            CheckItem(extractHandle, theitem, false);
 | 
						|
        else if (check > 0)
 | 
						|
            CheckItem(extractHandle, theitem, true);
 | 
						|
        break;
 | 
						|
 | 
						|
    case caseMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case insensitiveItem:
 | 
						|
            check = (modifiers ^= insensitiveFlag) & insensitiveFlag;
 | 
						|
            break;
 | 
						|
        case lowercaseItem:
 | 
						|
            check = (modifiers ^= lowercaseFlag) & lowercaseFlag;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (check == 0)
 | 
						|
            CheckItem(caseHandle, theitem, false);
 | 
						|
        else if (check > 0)
 | 
						|
            CheckItem(caseHandle, theitem, true);
 | 
						|
        break;
 | 
						|
 | 
						|
    case convertMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case autoItem:
 | 
						|
            CheckItem(convertHandle, autoItem, true);
 | 
						|
            CheckItem(convertHandle, binaryItem, false);
 | 
						|
            CheckItem(convertHandle, textItem, false);
 | 
						|
            modifiers &= (allFlags ^ textFlag);
 | 
						|
            modifiers |= autoFlag;
 | 
						|
            break;
 | 
						|
        case binaryItem:
 | 
						|
            CheckItem(convertHandle, autoItem, false);
 | 
						|
            CheckItem(convertHandle, binaryItem, true);
 | 
						|
            CheckItem(convertHandle, textItem, false);
 | 
						|
            modifiers &= (allFlags ^ (autoFlag | textFlag));
 | 
						|
            break;
 | 
						|
        case textItem:
 | 
						|
            CheckItem(convertHandle, autoItem, false);
 | 
						|
            CheckItem(convertHandle, binaryItem, false);
 | 
						|
            CheckItem(convertHandle, textItem, true);
 | 
						|
            modifiers &= (allFlags ^ autoFlag);
 | 
						|
            modifiers |= textFlag;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        break;
 | 
						|
 | 
						|
    case overwriteMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case alwaysItem:
 | 
						|
            CheckItem(overwriteHandle, alwaysItem, true);
 | 
						|
            CheckItem(overwriteHandle, neverItem, false);
 | 
						|
            CheckItem(overwriteHandle, promptItem, false);
 | 
						|
            modifiers &= (allFlags ^ neverFlag);
 | 
						|
            modifiers |= overwriteFlag;
 | 
						|
            break;
 | 
						|
        case neverItem:
 | 
						|
            CheckItem(overwriteHandle, alwaysItem, false);
 | 
						|
            CheckItem(overwriteHandle, neverItem, true);
 | 
						|
            CheckItem(overwriteHandle, promptItem, false);
 | 
						|
            modifiers &= (allFlags ^ overwriteFlag);
 | 
						|
            modifiers |= neverFlag;
 | 
						|
            break;
 | 
						|
        case promptItem:
 | 
						|
            CheckItem(overwriteHandle, alwaysItem, false);
 | 
						|
            CheckItem(overwriteHandle, neverItem, false);
 | 
						|
            CheckItem(overwriteHandle, promptItem, true);
 | 
						|
            modifiers &= (allFlags ^ (neverFlag | overwriteFlag));
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        break;
 | 
						|
 | 
						|
    case infoMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case prtCommentItem:
 | 
						|
            check = (modifiers ^= prtCommentFlag) & prtCommentFlag;
 | 
						|
            break;
 | 
						|
        case prtHeaderItem:
 | 
						|
            check = (modifiers ^= prtHeaderFlag) & prtHeaderFlag;
 | 
						|
            break;
 | 
						|
        case prtTotalsItem:
 | 
						|
            check = (modifiers ^= prtTotalsFlag) & prtTotalsFlag;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        if (check == 0)
 | 
						|
            CheckItem(infoHandle, theitem, false);
 | 
						|
        else if (check > 0)
 | 
						|
            CheckItem(infoHandle, theitem, true);
 | 
						|
        break;
 | 
						|
 | 
						|
    case formatMenu:
 | 
						|
        switch (theitem) {
 | 
						|
        case filenameItem:
 | 
						|
            CheckItem(formatHandle, filenameItem, true);
 | 
						|
            CheckItem(formatHandle, longItem, false);
 | 
						|
            CheckItem(formatHandle, mediumItem, false);
 | 
						|
            CheckItem(formatHandle, shortItem, false);
 | 
						|
            modifiers &= (allFlags ^ (longFlag | mediumFlag | shortFlag));
 | 
						|
            modifiers |= filenameFlag;
 | 
						|
            break;
 | 
						|
        case longItem:
 | 
						|
            CheckItem(formatHandle, filenameItem, false);
 | 
						|
            CheckItem(formatHandle, longItem, true);
 | 
						|
            CheckItem(formatHandle, mediumItem, false);
 | 
						|
            CheckItem(formatHandle, shortItem, false);
 | 
						|
            modifiers &= (allFlags ^ (filenameFlag | mediumFlag | shortFlag));
 | 
						|
            modifiers |= longFlag;
 | 
						|
            break;
 | 
						|
        case mediumItem:
 | 
						|
            CheckItem(formatHandle, filenameItem, false);
 | 
						|
            CheckItem(formatHandle, longItem, false);
 | 
						|
            CheckItem(formatHandle, mediumItem, true);
 | 
						|
            CheckItem(formatHandle, shortItem, false);
 | 
						|
            modifiers &= (allFlags ^ (filenameFlag | longFlag | shortFlag));
 | 
						|
            modifiers |= mediumFlag;
 | 
						|
            break;
 | 
						|
        case shortItem:
 | 
						|
            CheckItem(formatHandle, filenameItem, false);
 | 
						|
            CheckItem(formatHandle, longItem, false);
 | 
						|
            CheckItem(formatHandle, mediumItem, false);
 | 
						|
            CheckItem(formatHandle, shortItem, true);
 | 
						|
            modifiers &= (allFlags ^ (filenameFlag | longFlag | mediumFlag));
 | 
						|
            modifiers |= shortFlag;
 | 
						|
            break;
 | 
						|
        default:
 | 
						|
            break;
 | 
						|
        }
 | 
						|
        break;
 | 
						|
 | 
						|
    default:
 | 
						|
        break;
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    HiliteMenu(0);
 | 
						|
    return;
 | 
						|
}
 | 
						|
 | 
						|
void dokey(myevent) EventRecord *myevent;
 | 
						|
{
 | 
						|
    char code;
 | 
						|
 | 
						|
    code = (char)(myevent->message & charCodeMask);
 | 
						|
 | 
						|
    if (myevent->modifiers & cmdKey) {
 | 
						|
        if (myevent->what != autoKey) {
 | 
						|
            domenu(MenuKey(code));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return;
 | 
						|
}
 | 
						|
 | 
						|
void domousedown(myevent) EventRecord *myevent;
 | 
						|
{
 | 
						|
    WindowPtr whichwindow;
 | 
						|
    long code;
 | 
						|
 | 
						|
    code = FindWindow(myevent->where, &whichwindow);
 | 
						|
 | 
						|
    switch (code) {
 | 
						|
 | 
						|
    case inSysWindow:
 | 
						|
        SystemClick(myevent, whichwindow);
 | 
						|
        break;
 | 
						|
 | 
						|
    case inMenuBar:
 | 
						|
        domenu(MenuSelect(myevent->where));
 | 
						|
        break;
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    return;
 | 
						|
}
 | 
						|
 | 
						|
int main(argc, argv) int argc; char *argv[];
 | 
						|
{
 | 
						|
    struct Globals saveGlobals;
 | 
						|
    Boolean haveEvent, useWNE;
 | 
						|
    short markChar;
 | 
						|
    FILE *fp;
 | 
						|
 | 
						|
    FlushEvents(everyEvent, 0);
 | 
						|
    InitGraf(&qd.thePort);
 | 
						|
    InitFonts();
 | 
						|
    InitWindows();
 | 
						|
    InitMenus();
 | 
						|
    TEInit();
 | 
						|
    InitDialogs(nil);
 | 
						|
    InitCursor();
 | 
						|
 | 
						|
    CONSTRUCTGLOBALS();
 | 
						|
 | 
						|
    sprintf(UnzipVersion, "%d.%d%d%s of %s", UZ_MAJORVER, UZ_MINORVER,
 | 
						|
        PATCHLEVEL, BETALEVEL, VERSION_DATE);
 | 
						|
    sprintf(ZipinfoVersion, "%d.%d%d%s of %s", ZI_MAJORVER, ZI_MINORVER,
 | 
						|
        PATCHLEVEL, BETALEVEL, VERSION_DATE);
 | 
						|
 | 
						|
    c2pstr(UnzipVersion);
 | 
						|
    c2pstr(ZipinfoVersion);
 | 
						|
 | 
						|
    SysEnvirons(1, &sysRec);
 | 
						|
    useWNE = TrapAvailable(sysRec.machineType, _WaitNextEvent, ToolTrap);
 | 
						|
 | 
						|
    SetMenuBar(menubar = GetNewMBar(unzipMenuBar));
 | 
						|
    DisposeHandle(menubar);
 | 
						|
    InsertMenu(GetMenu(screenMenu), -1);
 | 
						|
    InsertMenu(GetMenu(extractMenu), -1);
 | 
						|
    InsertMenu(GetMenu(caseMenu), -1);
 | 
						|
    InsertMenu(GetMenu(convertMenu), -1);
 | 
						|
    InsertMenu(GetMenu(overwriteMenu), -1);
 | 
						|
    InsertMenu(GetMenu(infoMenu), -1);
 | 
						|
    InsertMenu(GetMenu(formatMenu), -1);
 | 
						|
    AddResMenu(appleHandle = GetMHandle(appleMenu), 'DRVR');
 | 
						|
    modifierHandle = GetMHandle(modifierMenu);
 | 
						|
    screenHandle = GetMHandle(screenMenu);
 | 
						|
    extractHandle = GetMHandle(extractMenu);
 | 
						|
    caseHandle = GetMHandle(caseMenu);
 | 
						|
    convertHandle = GetMHandle(convertMenu);
 | 
						|
    overwriteHandle = GetMHandle(overwriteMenu);
 | 
						|
    infoHandle = GetMHandle(infoMenu);
 | 
						|
    formatHandle = GetMHandle(formatMenu);
 | 
						|
    DrawMenuBar();
 | 
						|
 | 
						|
    screenOpen("Unzip");
 | 
						|
 | 
						|
    modifiers = 0;
 | 
						|
 | 
						|
    GetItemMark(modifierHandle, quietItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= quietFlag;
 | 
						|
    GetItemMark(modifierHandle, verboseItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= verboseFlag;
 | 
						|
 | 
						|
    GetItemMark(screenHandle, pauseItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= pauseFlag;
 | 
						|
    screenControl("p", markChar);
 | 
						|
    GetItemMark(screenHandle, scrollItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= scrollFlag;
 | 
						|
    screenControl("s", markChar);
 | 
						|
 | 
						|
    GetItemMark(extractHandle, screenItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= screenFlag;
 | 
						|
    GetItemMark(extractHandle, junkItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= junkFlag;
 | 
						|
 | 
						|
    GetItemMark(caseHandle, insensitiveItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= insensitiveFlag;
 | 
						|
    GetItemMark(caseHandle, lowercaseItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= lowercaseFlag;
 | 
						|
 | 
						|
    GetItemMark(convertHandle, autoItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= autoFlag;
 | 
						|
    GetItemMark(convertHandle, textItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= textFlag;
 | 
						|
 | 
						|
    if ((modifiers & (autoFlag | textFlag)) == (autoFlag | textFlag)) {
 | 
						|
        CheckItem(convertHandle, textItem, false);
 | 
						|
        modifiers &= (allFlags ^ textFlag);
 | 
						|
    } else if (modifiers & (autoFlag | textFlag))
 | 
						|
        CheckItem(convertHandle, binaryItem, false);
 | 
						|
    else
 | 
						|
        CheckItem(convertHandle, binaryItem, true);
 | 
						|
 | 
						|
    GetItemMark(overwriteHandle, alwaysItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= overwriteFlag;
 | 
						|
    GetItemMark(overwriteHandle, neverItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= neverFlag;
 | 
						|
 | 
						|
    if ((modifiers & (neverFlag | overwriteFlag)) == (neverFlag | overwriteFlag)) {
 | 
						|
        CheckItem(overwriteHandle, alwaysItem, false);
 | 
						|
        CheckItem(overwriteHandle, neverItem, false);
 | 
						|
        CheckItem(overwriteHandle, promptItem, true);
 | 
						|
        modifiers &= (allFlags ^ (neverFlag | overwriteFlag));
 | 
						|
    } else if (modifiers & (neverFlag | overwriteFlag))
 | 
						|
        CheckItem(overwriteHandle, promptItem, false);
 | 
						|
    else
 | 
						|
        CheckItem(overwriteHandle, promptItem, true);
 | 
						|
 | 
						|
    GetItemMark(infoHandle, prtCommentItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= prtCommentFlag;
 | 
						|
    GetItemMark(infoHandle, prtHeaderItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= prtHeaderFlag;
 | 
						|
    GetItemMark(infoHandle, prtTotalsItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= prtTotalsFlag;
 | 
						|
 | 
						|
    GetItemMark(formatHandle, filenameItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= filenameFlag;
 | 
						|
    GetItemMark(formatHandle, longItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= longFlag;
 | 
						|
    GetItemMark(formatHandle, mediumItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= mediumFlag;
 | 
						|
    GetItemMark(formatHandle, shortItem, &markChar);
 | 
						|
    if (markChar) modifiers ^= shortFlag;
 | 
						|
 | 
						|
    if (modifiers & longFlag) {
 | 
						|
        CheckItem(formatHandle, filenameItem, false);
 | 
						|
        CheckItem(formatHandle, mediumItem, false);
 | 
						|
        CheckItem(formatHandle, shortItem, false);
 | 
						|
        modifiers &= (allFlags ^ (filenameFlag | mediumFlag | shortFlag));
 | 
						|
    } else if (modifiers & mediumFlag) {
 | 
						|
        CheckItem(formatHandle, filenameItem, false);
 | 
						|
        CheckItem(formatHandle, shortItem, false);
 | 
						|
        modifiers &= (allFlags ^ (filenameFlag | shortFlag));
 | 
						|
    } else if (modifiers & shortFlag) {
 | 
						|
        CheckItem(formatHandle, filenameItem, false);
 | 
						|
        modifiers &= (allFlags ^ filenameFlag);
 | 
						|
    }
 | 
						|
 | 
						|
    command = ' ';
 | 
						|
 | 
						|
    stop = false;
 | 
						|
    while (!stop) {
 | 
						|
        SetCursor(&qd.arrow);
 | 
						|
 | 
						|
        if (useWNE) {
 | 
						|
            haveEvent = WaitNextEvent(everyEvent, &myevent, MAXLONG, NULL);
 | 
						|
        } else {
 | 
						|
            SystemTask();
 | 
						|
            haveEvent = GetNextEvent(everyEvent, &myevent);
 | 
						|
        }
 | 
						|
 | 
						|
        if (haveEvent) {
 | 
						|
            switch (myevent.what) {
 | 
						|
 | 
						|
            case activateEvt:
 | 
						|
                break;
 | 
						|
 | 
						|
            case keyDown:
 | 
						|
            case autoKey:
 | 
						|
                dokey(&myevent);
 | 
						|
                break;
 | 
						|
 | 
						|
            case mouseDown:
 | 
						|
                domousedown(&myevent);
 | 
						|
                break;
 | 
						|
 | 
						|
            case updateEvt:
 | 
						|
                screenUpdate(myevent.message);
 | 
						|
                break;
 | 
						|
 | 
						|
            case mouseUp:
 | 
						|
            case keyUp:
 | 
						|
                break;
 | 
						|
 | 
						|
            default:
 | 
						|
                break;
 | 
						|
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        if (command != ' ') {
 | 
						|
            char *s, **v, modifierString[32];
 | 
						|
            SFReply fileRep;
 | 
						|
            Point p;
 | 
						|
            int m, n;
 | 
						|
 | 
						|
            SetPt(&p, 40, 40);
 | 
						|
 | 
						|
            SFGetFile(p, "\pSpecify ZIP file:", 0L, -1, nil, 0L, &fileRep);
 | 
						|
            if (fileRep.good) {
 | 
						|
                MacFSTest(fileRep.vRefNum);
 | 
						|
                ResolveMacVol(fileRep.vRefNum, &G.gnVRefNum, &G.glDirID, NULL);
 | 
						|
 | 
						|
                p2cstr((Ptr)fileRep.fName);
 | 
						|
 | 
						|
                modifierMask &= modifiers;
 | 
						|
 | 
						|
                s = modifierString;
 | 
						|
 | 
						|
                *s++ = '-';
 | 
						|
                if ((command != 'x') && (command != 'Z')) *s++ = command;
 | 
						|
 | 
						|
                if (modifierMask) {
 | 
						|
                    if (modifierMask & (autoFlag | textFlag)) *s++ = 'a';
 | 
						|
                    if (modifierMask & textFlag) *s++ = 'a';
 | 
						|
                    if (modifierMask & insensitiveFlag) *s++ = 'C';
 | 
						|
                    if (!G.HFSFlag || (modifierMask & junkFlag)) *s++ = 'j';
 | 
						|
                    if (modifierMask & lowercaseFlag) *s++ = 'L';
 | 
						|
                    if (modifierMask & neverFlag) *s++ = 'n';
 | 
						|
                    if (modifierMask & overwriteFlag) *s++ = 'o';
 | 
						|
                    if (modifierMask & quietFlag) *s++ = 'q';
 | 
						|
                    if (modifierMask & verboseFlag) *s++ = 'v';
 | 
						|
 | 
						|
                    if (modifierMask & prtCommentFlag) *s++ = 'z';
 | 
						|
                    if (modifierMask & prtHeaderFlag) *s++ = 'h';
 | 
						|
                    if (modifierMask & prtTotalsFlag) *s++ = 't';
 | 
						|
                    if (modifierMask & filenameFlag) *s++ = '2';
 | 
						|
                    if (modifierMask & longFlag) *s++ = 'l';
 | 
						|
                    if (modifierMask & mediumFlag) *s++ = 'm';
 | 
						|
                    if (modifierMask & shortFlag) *s++ = 's';
 | 
						|
                }
 | 
						|
 | 
						|
                if (*(s - 1) == '-') s -= 1;
 | 
						|
 | 
						|
                *s = '\0';
 | 
						|
 | 
						|
                v = (char **)malloc(sizeof(char *));
 | 
						|
                *v = "unzip";
 | 
						|
                argc = 1;
 | 
						|
 | 
						|
                envargs(&argc, &v, NULL, NULL);
 | 
						|
 | 
						|
                argv = (char **)malloc((argc + 3) * sizeof(char *));
 | 
						|
 | 
						|
                argv[m = 0] = (command == 'Z') ? "zipinfo" : "unzip";
 | 
						|
                if (*modifierString) argv[++m] = modifierString;
 | 
						|
                argv[++m] = (char *)fileRep.fName;
 | 
						|
                for (n = 1; n < argc; n++) argv[n + m] = v[n];
 | 
						|
                argv[argc += m] = NULL;
 | 
						|
 | 
						|
                free(v);
 | 
						|
 | 
						|
                for (n = 0; argv[n] != NULL; n++) printf("%s ", argv[n]);
 | 
						|
                printf("...\n\n");
 | 
						|
 | 
						|
                memcpy(&saveGlobals, &G, sizeof(struct Globals));
 | 
						|
 | 
						|
                unzip(__G__ argc, argv);
 | 
						|
                
 | 
						|
                memcpy(&G, &saveGlobals, sizeof(struct Globals));
 | 
						|
 | 
						|
                printf("\nDone\n");
 | 
						|
 | 
						|
                screenControl("r", 0);
 | 
						|
            }
 | 
						|
 | 
						|
            fileList[0] = '\0';
 | 
						|
            command = ' ';
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    screenClose();
 | 
						|
 | 
						|
    DESTROYGLOBALS()
 | 
						|
 | 
						|
    ExitToShell();
 | 
						|
}
 |