⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macunzip.c

📁 完整的解压zip文件的源码。包含密码功能
💻 C
📖 第 1 页 / 共 2 页
字号:
/*---------------------------------------------------------------------------  macunzip.c  Main-function for use with the standalone Unzip App.  ---------------------------------------------------------------------------*//*****************************************************************************//*  Includes                                                                 *//*****************************************************************************/#define UNZIP_INTERNAL#include "unzip.h"#include "version.h"#include "pathname.h"#include "helpers.h"#include <Traps.h>/*****************************************************************************//*  Macros, typedefs                                                         *//*****************************************************************************/#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#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/*****************************************************************************//*  Global Vars                                                              *//*****************************************************************************/char UnzipVersion[32], ZipinfoVersion[32];long modifiers, modifierMask;EventRecord myevent;MenuHandle appleHandle, modifierHandle, screenHandle, extractHandle;MenuHandle caseHandle, convertHandle, overwriteHandle, infoHandle;MenuHandle formatHandle;Handle menubar, itemHandle;short itemType;Rect itemRect;char command;extern char fileList[256];Boolean stop;SysEnvRec sysRec;/*****************************************************************************//*  Prototypes                                                               *//*****************************************************************************/static void domousedown(EventRecord *myevent);/*****************************************************************************//*  Functions                                                                *//*****************************************************************************/static 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) !=#ifdef __MWERKS__        NGetTrapAddress(_Unimplemented, trapType));#else        GetTrapAddress(_Unimplemented));#endif}/*** excute menu-command***/static 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 {            GetMenuItemText(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) {                GetDialogItem(thedialog, editItem, &itemType, &itemHandle,                              &itemRect);                GetDialogItemText(itemHandle, (StringPtr)&fileList);                p2cstr((StringPtr)fileList);            }            DisposeDialog(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;        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -