Inheritance: IDisposable
        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;
        }
Exemple #2
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);
        }
Exemple #3
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);
        }
Exemple #4
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;
        }