📄 macfile.c
字号:
/*--------------------------------------------------------------------------- mac.c This source file is used by the mac port to support commands not available directly on the Mac, i.e. mkdir(). It also helps determine if we're running on a Mac with HFS and a disk formatted for HFS (HFS - Hierarchical File System; compared to its predecessor, MFS - Macintosh File System). ---------------------------------------------------------------------------*/#include "unzip.h"#ifdef MACOS#ifndef THINK_C#define FSFCBLen (*(short *)0x3F6)#define CtoPstr c2pstr#define PtoCstr p2cstr#endifstatic short wAppVRefNum;static long lAppDirID;int hfsflag; /* set if disk has hierarchical file system */static int IsHFSDisk(short wRefNum){ /* get info about the specified volume */ if (hfsflag == true) { HParamBlockRec hpbr; Str255 temp; short wErr; hpbr.volumeParam.ioCompletion = 0; hpbr.volumeParam.ioNamePtr = temp; hpbr.volumeParam.ioVRefNum = wRefNum; hpbr.volumeParam.ioVolIndex = 0; wErr = PBHGetVInfo(&hpbr, 0); if (wErr == noErr && hpbr.volumeParam.ioVFSID == 0 && hpbr.volumeParam.ioVSigWord == 0x4244) { return true; } } return false;} /* IsHFSDisk */void macfstest(int vrefnum){ Str255 st; /* is this machine running HFS file system? */ if (FSFCBLen <= 0) { hfsflag = false; } else { hfsflag = true; } /* get the file's volume reference number and directory ID */ if (hfsflag == true) { WDPBRec wdpb; OSErr err = noErr; if (vrefnum != 0) { wdpb.ioCompletion = false; wdpb.ioNamePtr = st; wdpb.ioWDIndex = 0; wdpb.ioVRefNum = vrefnum; err = PBHGetVol(&wdpb, false); if (err == noErr) { wAppVRefNum = wdpb.ioWDVRefNum; lAppDirID = wdpb.ioWDDirID; } } /* is the disk we're using formatted for HFS? */ hfsflag = IsHFSDisk(wAppVRefNum); }} /* mactest */int mkdir(char *path){ OSErr err = -1; if (path != 0 && strlen(path)<256 && hfsflag == true) { HParamBlockRec hpbr; Str255 st; short wVol; long lDirID; CtoPstr(path); hpbr.fileParam.ioNamePtr = st; hpbr.fileParam.ioCompletion = NULL; err = PBHGetVol((WDPBPtr)&hpbr, false); if (err == noErr) { wVol = hpbr.wdParam.ioWDVRefNum; lDirID = hpbr.wdParam.ioWDDirID; hpbr.fileParam.ioCompletion = NULL; hpbr.fileParam.ioVRefNum = wVol; hpbr.fileParam.ioDirID = lDirID; hpbr.fileParam.ioNamePtr = (StringPtr)path; err = PBDirCreate(&hpbr, false); } PtoCstr(path); } return (int)err;} /* mkdir */void SetMacVol(char *pch, short wVRefNum){ OSErr err = -1; if (hfsflag == true) { HParamBlockRec hpbr; Str255 st; hpbr.wdParam.ioCompletion = NULL; hpbr.wdParam.ioNamePtr = st; hpbr.wdParam.ioVRefNum = wVRefNum; hpbr.wdParam.ioWDIndex = 0; hpbr.wdParam.ioWDProcID = 0; hpbr.wdParam.ioWDVRefNum = 0; err = PBGetWDInfo((WDPBPtr)&hpbr, false); if (err == noErr) { hpbr.wdParam.ioCompletion = NULL; hpbr.wdParam.ioNamePtr = NULL; err = PBHSetVol((WDPBPtr)&hpbr, false); } } else { err = SetVol((StringPtr)pch, wVRefNum); }} /* SetMacVol */#endif /* MACOS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -