📄 os2ea.cpp
字号:
#include <os2.h>void ExtractOS2EA(Archive &Arc,char *FileName){ if (_osmode != OS2_MODE) { mprintf(St(MSkipEA)); return; } if (Arc.HeaderCRC!=Arc.EAHead.HeadCRC) { Log(Arc.FileName,St(MEABroken),FileName); ErrHandler.SetErrorCode(CRC_ERROR); return; } if (Arc.EAHead.Method<0x31 || Arc.EAHead.Method>0x35 || Arc.EAHead.UnpVer>PACK_VER) { Log(Arc.FileName,St(MEAUnknHeader),FileName); ErrHandler.SetErrorCode(WARNING); return; } struct StructEAOP2 { char *GEAPtr; char *FEAPtr; unsigned long Error; } EAOP2; ComprDataIO DataIO; Unpack Unpack(&DataIO); Unpack.Init(); Array<unsigned char> UnpData(Arc.EAHead.UnpSize); DataIO.SetUnpackToMemory(&UnpData[0],Arc.EAHead.UnpSize); DataIO.SetPackedSizeToRead(Arc.EAHead.DataSize); DataIO.EnableShowProgress(false); DataIO.SetFiles(&Arc,NULL); Unpack.SetDestSize(Arc.EAHead.UnpSize); Unpack.DoUnpack(Arc.EAHead.UnpVer,false); if (Arc.EAHead.EACRC!=~DataIO.UnpFileCRC) { Log(Arc.FileName,St(MEABroken),FileName); ErrHandler.SetErrorCode(CRC_ERROR); return; } EAOP2.FEAPtr=(char *)&UnpData[0]; EAOP2.GEAPtr=NULL; if (DosSetPathInfo((unsigned char *)FileName,2,&EAOP2,sizeof(EAOP2),0x10)!=0) { Log(Arc.FileName,St(MCannotSetEA),FileName); ErrHandler.SetErrorCode(WARNING); } File::SetCloseFileTimeByName(FileName,&Arc.NewLhd.mtime,&Arc.NewLhd.atime); mprintf(St(MShowEA));}void ExtractOS2EANew(Archive &Arc,char *FileName){ if (_osmode != OS2_MODE) { mprintf(St(MSkipEA)); return; } Array<byte> SubData; if (!Arc.ReadSubData(&SubData,NULL)) return; struct StructEAOP2 { char *GEAPtr; char *FEAPtr; unsigned long Error; } EAOP2; EAOP2.FEAPtr=(char *)&SubData[0]; EAOP2.GEAPtr=NULL; if (DosSetPathInfo((unsigned char *)FileName,2,&EAOP2,sizeof(EAOP2),0x10)!=0) { Log(Arc.FileName,St(MCannotSetEA),FileName); ErrHandler.SetErrorCode(WARNING); } File::SetCloseFileTimeByName(FileName,&Arc.NewLhd.mtime,&Arc.NewLhd.atime); mprintf(St(MShowEA));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -