public static int Extract( List<string> args ) { string inFile = null; string headerFile = null; string outFile = null; bool nometa = false; try { for ( int i = 0; i < args.Count; ++i ) { switch ( args[i] ) { case "-h": headerFile = args[++i]; break; case "-nometa": nometa = true; break; default: if ( inFile == null ) { inFile = args[i]; } else if ( outFile == null ) { outFile = args[i]; } else { PrintExtractUsage(); return -1; } break; } } } catch ( IndexOutOfRangeException ) { PrintExtractUsage(); return -1; } if ( inFile == null ) { PrintExtractUsage(); return -1; } if ( outFile == null ) { outFile = inFile + ".ext"; } FPS4 fps4; if ( headerFile != null ) { fps4 = new FPS4( headerFile, inFile ); } else { fps4 = new FPS4( inFile ); } fps4.Extract( outFile, noMetadataParsing: nometa ); return 0; }
public static int Pack(List <string> args) { if (args.Count < 2) { PrintPackUsage(); return(-1); } string dir = null; string outName = null; string outHeaderName = null; ushort?bitmask = null; uint? alignment = null; uint? alignmentFirstFile = null; bool orderByExtension = false; bool includeSubdirs = false; bool littleEndian = false; string originalFps4 = null; string metadata = null; string comment = null; uint multiplier = 1; try { for (int i = 0; i < args.Count; ++i) { switch (args[i]) { case "-a": alignment = HexUtils.ParseDecOrHex(args[++i]); break; case "--firstalign": alignmentFirstFile = HexUtils.ParseDecOrHex(args[++i]); break; case "-b": bitmask = (ushort)HexUtils.ParseDecOrHex(args[++i]); break; case "-l": littleEndian = true; break; case "-m": metadata = args[++i]; break; case "-c": comment = UnEscape(args[++i]); break; case "-e": orderByExtension = true; break; case "-s": includeSubdirs = true; break; case "-h": outHeaderName = args[++i]; break; case "-o": originalFps4 = args[++i]; break; case "--multiplier": multiplier = HexUtils.ParseDecOrHex(args[++i]); break; default: if (dir == null) { dir = args[i]; } else if (outName == null) { outName = args[i]; } else { PrintPackUsage(); return(-1); } break; } } } catch (IndexOutOfRangeException) { PrintPackUsage(); return(-1); } if (dir == null || outName == null) { PrintPackUsage(); return(-1); } FPS4 fps4; if (originalFps4 != null) { fps4 = new FPS4(originalFps4); } else { fps4 = new FPS4(); } if (bitmask != null) { fps4.ContentBitmask = new ContentInfo((ushort)bitmask); } if (alignment != null) { fps4.Alignment = (uint)alignment; } if (littleEndian) { fps4.Endian = EndianUtils.Endianness.LittleEndian; } if (comment != null) { fps4.ArchiveName = comment; } string[] files; if (includeSubdirs) { files = System.IO.Directory.GetFiles(dir, "*", System.IO.SearchOption.AllDirectories); } else { files = System.IO.Directory.GetFiles(dir); } if (orderByExtension) { files = files.OrderBy(x => x.Split('.').Last()).ToArray(); } FPS4.Pack( files, outName, fps4.ContentBitmask, fps4.Endian, fps4.Unknown2, originalFps4 != null ? new System.IO.FileStream(originalFps4, System.IO.FileMode.Open) : null, fps4.ArchiveName, fps4.FirstFileStart, fps4.Alignment, headerName: outHeaderName, metadata: metadata, alignmentFirstFile: alignmentFirstFile, fileLocationMultiplier: multiplier ); return(0); }
public static int Extract(List <string> args) { string inFile = null; string headerFile = null; string outFile = null; bool nometa = false; try { for (int i = 0; i < args.Count; ++i) { switch (args[i]) { case "-h": headerFile = args[++i]; break; case "-nometa": nometa = true; break; default: if (inFile == null) { inFile = args[i]; } else if (outFile == null) { outFile = args[i]; } else { PrintExtractUsage(); return(-1); } break; } } } catch (IndexOutOfRangeException) { PrintExtractUsage(); return(-1); } if (inFile == null) { PrintExtractUsage(); return(-1); } if (outFile == null) { outFile = inFile + ".ext"; } FPS4 fps4; if (headerFile != null) { fps4 = new FPS4(headerFile, inFile); } else { fps4 = new FPS4(inFile); } fps4.Extract(outFile, noMetadataParsing: nometa); return(0); }
public static int Pack(List <string> args) { if (args.Count < 2) { PrintPackUsage(); return(-1); } string dir = null; string outName = null; string outHeaderName = null; ushort?bitmask = null; uint? alignment = null; uint? alignmentFirstFile = null; bool orderByExtension = false; bool includeSubdirs = false; bool littleEndian = false; string originalFps4 = null; string metadata = null; string comment = null; uint multiplier = 1; try { for (int i = 0; i < args.Count; ++i) { switch (args[i]) { case "-a": alignment = HexUtils.ParseDecOrHex(args[++i]); break; case "--firstalign": alignmentFirstFile = HexUtils.ParseDecOrHex(args[++i]); break; case "-b": bitmask = (ushort)HexUtils.ParseDecOrHex(args[++i]); break; case "-l": littleEndian = true; break; case "-m": metadata = args[++i]; break; case "-c": comment = UnEscape(args[++i]); break; case "-e": orderByExtension = true; break; case "-s": includeSubdirs = true; break; case "-h": outHeaderName = args[++i]; break; case "-o": originalFps4 = args[++i]; break; case "--multiplier": multiplier = HexUtils.ParseDecOrHex(args[++i]); break; default: if (dir == null) { dir = args[i]; } else if (outName == null) { outName = args[i]; } else { PrintPackUsage(); return(-1); } break; } } } catch (IndexOutOfRangeException) { PrintPackUsage(); return(-1); } if (dir == null || outName == null) { PrintPackUsage(); return(-1); } FPS4 fps4; if (originalFps4 != null) { fps4 = new FPS4(originalFps4, printProgressToConsole: true); } else { fps4 = new FPS4(); } if (bitmask != null) { fps4.ContentBitmask = new ContentInfo((ushort)bitmask); } if (alignment != null) { fps4.Alignment = (uint)alignment; } if (littleEndian) { fps4.Endian = EndianUtils.Endianness.LittleEndian; } if (comment != null) { fps4.ArchiveName = comment; } string[] files; if (includeSubdirs) { files = System.IO.Directory.GetFiles(dir, "*", System.IO.SearchOption.AllDirectories); } else { files = System.IO.Directory.GetFiles(dir); } if (orderByExtension) { files = files.OrderBy(x => x.Split('.').Last()).ToArray(); } Stream outStream = new FileStream(outName, FileMode.Create); Stream outHeaderStream = outHeaderName == null ? null : new FileStream(outHeaderName, FileMode.Create); List <PackFileInfo> packFileInfos = new List <PackFileInfo>(files.Length); foreach (var file in files) { var fi = new System.IO.FileInfo(file); var p = new PackFileInfo(); p.Name = fi.Name; p.Length = fi.Length; if (metadata.Contains('p')) { try { p.RelativePath = FPS4.GetRelativePath(outHeaderName == null ? outName : outHeaderName, fi.FullName); } catch (Exception) { } } p.DataStream = new DuplicatableFileStream(file); packFileInfos.Add(p); } try { FPS4.Pack( packFileInfos, outStream, fps4.ContentBitmask, fps4.Endian, fps4.Unknown2, originalFps4 != null ? new System.IO.FileStream(originalFps4, System.IO.FileMode.Open) : null, fps4.ArchiveName, fps4.FirstFileStart, fps4.Alignment, outputHeaderStream: outHeaderStream, metadata: metadata, alignmentFirstFile: alignmentFirstFile, fileLocationMultiplier: multiplier, printProgressToConsole: true ); } finally { outStream.Close(); if (outHeaderStream != null) { outHeaderStream.Close(); } } return(0); }
public static int Pack( List<string> args ) { if ( args.Count < 2 ) { PrintPackUsage(); return -1; } string dir = null; string outName = null; string outHeaderName = null; ushort? bitmask = null; uint? alignment = null; bool orderByExtension = false; bool includeSubdirs = false; bool littleEndian = false; string originalFps4 = null; string metadata = null; string comment = null; try { for ( int i = 0; i < args.Count; ++i ) { switch ( args[i] ) { case "-a": alignment = Util.ParseDecOrHex( args[++i] ); break; case "-b": bitmask = (ushort)Util.ParseDecOrHex( args[++i] ); break; case "-l": littleEndian = true; break; case "-m": metadata = args[++i]; break; case "-c": comment = args[++i].UnEscape(); break; case "-e": orderByExtension = true; break; case "-s": includeSubdirs = true; break; case "-h": outHeaderName = args[++i]; break; case "-o": originalFps4 = args[++i]; break; default: if ( dir == null ) { dir = args[i]; } else if ( outName == null ) { outName = args[i]; } else { PrintPackUsage(); return -1; } break; } } } catch ( IndexOutOfRangeException ) { PrintPackUsage(); return -1; } if ( dir == null || outName == null ) { PrintPackUsage(); return -1; } FPS4 fps4; if ( originalFps4 != null ) { fps4 = new FPS4( originalFps4 ); } else { fps4 = new FPS4(); } if ( bitmask != null ) { fps4.ContentBitmask = (ushort)bitmask; } if ( alignment != null ) { fps4.Alignment = (uint)alignment; } if ( littleEndian ) { fps4.Endian = Util.Endianness.LittleEndian; } if ( comment != null ) { fps4.ArchiveName = comment; } string[] files; if ( includeSubdirs ) { files = System.IO.Directory.GetFiles( dir, "*", System.IO.SearchOption.AllDirectories ); } else { files = System.IO.Directory.GetFiles( dir ); } if ( orderByExtension ) { files = files.OrderBy( x => x.Split( '.' ).Last() ).ToArray(); } fps4.Pack( files, outName, headerName: outHeaderName, metadata: metadata ); return 0; }