void ListArchive(void) { unsigned long TotalPackSize,TotalUnpSize,FileCount,ArchivesCount; unsigned long SumPackSize,SumUnpSize,SumFileCount; int I,OutHeader; ArchivesCount=SumPackSize=SumUnpSize=SumFileCount=0; while (ReadArcName()) { if ((ArcPtr=wopen(ArcName,READBINARY,M_DENYWRITE))==NULL) continue; while (1) { TotalPackSize=TotalUnpSize=FileCount=0; if (IsArchive()) { OutHeader=0; ViewComment(); tseek(ArcPtr,NewMhd.HeadSize-MainHeadSize,SEEK_CUR); mprintf("\n"); if (SolidType) mprintf(MListSolid); if (SFXLen>0) mprintf(MListSFX); if (ArcType==VOL) if (SolidType) mprintf(MListVol1); else mprintf(MListVol2); else if (SolidType) mprintf(MListArc1); else mprintf(MListArc2); mprintf(" %s\n",ArcName); while(ReadBlock(FILE_HEAD) > 0) { if (IsProcessFile(NOT_COMPARE_PATH)) { if (!OutHeader) { if (MainCommand[0]=='V') mprintf(MListPathComm); else mprintf(MListName); mprintf(MListTitle); for (I=0;I<79;I++) mprintf("-"); OutHeader=1; } mprintf("\n%c",(NewLhd.Flags & LHD_PASSWORD) ? '*' : ' '); if (MainCommand[0]=='V' || strlen(PointToName(ArcFileName))>=13) { mprintf("%s",ArcFileName); ViewFileComment(); mprintf("\n%12s ",""); } else mprintf("%-12s",PointToName(ArcFileName)); mprintf(" %8lu %8lu ",NewLhd.UnpSize,NewLhd.PackSize); if ((NewLhd.Flags & LHD_SPLIT_BEFORE) && (NewLhd.Flags & LHD_SPLIT_AFTER)) mprintf(" <->"); else if (NewLhd.Flags & LHD_SPLIT_BEFORE) mprintf(" <--"); else if (NewLhd.Flags & LHD_SPLIT_AFTER) mprintf(" -->"); else mprintf("%3d%%",ToPercent(NewLhd.PackSize,NewLhd.UnpSize)); ConvertDate(NewLhd.FileTime); mprintf(" %2.2s-%2.2s-%2.2s %2.2s:%2.2s ", DateStr,DateStr+2,DateStr+4,DateStr+6,DateStr+8); ShowAttr(); mprintf(" %8.8lX",NewLhd.FileCRC); mprintf(" m%d",NewLhd.Method-0x30); if ((NewLhd.Flags & LHD_WINDOWMASK)<=4*32) mprintf("%c",((NewLhd.Flags&LHD_WINDOWMASK)>>5)+'a'); else mprintf(" "); mprintf(" %d.%d",NewLhd.UnpVer/10,NewLhd.UnpVer%10); if (!(NewLhd.Flags & LHD_SPLIT_BEFORE)) { TotalUnpSize+=NewLhd.UnpSize; FileCount++; } TotalPackSize+=NewLhd.PackSize; } tseek(ArcPtr,NextBlockPos,SEEK_SET); } if (OutHeader) { mprintf("\n"); for (I=0;I<79;I++) mprintf("-"); mprintf("\n%5lu %16lu %8lu %3d%%\n",FileCount,TotalUnpSize, TotalPackSize,ToPercent(TotalPackSize,TotalUnpSize)); SumFileCount+=FileCount; SumUnpSize+=TotalUnpSize; SumPackSize+=TotalPackSize; } else mprintf(MListNoFiles); ArchivesCount++; if (Opt.PackVolume && (NewLhd.Flags & LHD_SPLIT_AFTER) && MergeArchive(0)) tseek(ArcPtr,0,SEEK_SET); else break; } else { if (TotalArcCount<2) mprintf(MNotRAR,ArcName); break; } } tclose(ArcPtr); } if (ArchivesCount>1) mprintf("\n%5lu %16lu %8lu %3d%%\n",SumFileCount,SumUnpSize, SumPackSize,ToPercent(SumPackSize,SumUnpSize)); }