コード例 #1
0
        public static CompanionFile CreateCompanionFile(CompanionFileType fileType, int offset, byte[] data)
        {
            CompanionFile cf = null;

            switch (fileType)
            {
                case CompanionFileType.FGRP: cf = new FGRP(); break;
                case CompanionFileType.MGRP: cf = new MGRP(); break;
                case CompanionFileType.DVIC: cf = new DVIC(); break;
                case CompanionFileType.XMTR: cf = new XMTR(); break;
                case CompanionFileType.RCVR: cf = new RCVR(); break;
                case CompanionFileType.ICMD: cf = new ICMD(); break;
                case CompanionFileType.PRND: cf = new PRND(); break;
                case CompanionFileType.EVNT: cf = new EVNT(); break;
                case CompanionFileType.RESP: cf = new RESP(); break;
                case CompanionFileType.JOBF: cf = new JOBF(); break;
                case CompanionFileType.TEXT: cf = new TEXT(); break;
                case CompanionFileType.DIRC: cf = new DIRC(); break;
                case CompanionFileType.TELV: cf = new TELV(); break;
                case CompanionFileType.ZONE: cf = new ZONE(); break;
                case CompanionFileType.FEMA: cf = new FEMA(); break;
                case CompanionFileType.DIAL: cf = new DIAL(); break;
                case CompanionFileType.INPU: cf = new INPU(); break;
                case CompanionFileType.SCHD: cf = new SCHD(); break;
                case CompanionFileType.TELL: cf = new TELL(); break;
                case CompanionFileType.ZNAM: cf = new ZNAM(); break;
                case CompanionFileType.TRAN: cf = new TRAN(); break;
                case CompanionFileType.RNAM: cf = new RNAM(); break;
                case CompanionFileType.JOBX: cf = new JOBX(); break;
                case CompanionFileType.WORK: cf = new WORK(); break;
                case CompanionFileType.NOTE: cf = new NOTE(); break;
                case CompanionFileType.RDAT: cf = new RDAT(); break;
                case CompanionFileType.CWAP: cf = new CWAP(); break;
                case CompanionFileType.IPSH: cf = new IPSH(); break;
                case CompanionFileType.IUSR: cf = new IUSR(); break;
                case CompanionFileType.PAGR: cf = new PAGR(); break;
                case CompanionFileType.REMS: cf = new REMS(); break;
                case CompanionFileType.LTXT: cf = new LTXT(); break;

                default: cf = null; break;
            }

            if (cf != null)
            {
                cf.FileType = fileType;
                cf.FromList(offset, data);
            }

            return cf;
        }
コード例 #2
0
        public static string FileFormat(CompanionFileType fileType, bool useAlternate = false)
        {
            // The format string defines how a single record appears in human-readable format in a workbench file.
            // It does not attempt to define the meaning of any given piece of data; it is meant to format a byte
            // stream as a single record in the Workbench file.

            // The format is structured as follows:
            //      | (vertical bar)        a line-break
            //      r[{n};{format}]         repeat {format} {n} times
            //      s{n}                    double-quoted string of length {n}
            //      z{n}                    double-quoted string of length {n}, however null characters are emitted as bytes
            //                              text.txt:   "Some text here ",0,"                "
            //      b{n}                    comma-separated list of {n} bytes
            //      , (comma)               literal comma separating items on a single line

            switch (fileType)
            {
                case CompanionFileType.FGRP: return "r[8;b12]|s18,b14";
                case CompanionFileType.MGRP: return "r[5;b2]|r[4;b4]|r[22;b1]";
                case CompanionFileType.DVIC: return "s18,s10,s18,b2";
                case CompanionFileType.XMTR: return "b2";
                case CompanionFileType.RCVR: return "b1,s10,s10,b3";
                case CompanionFileType.ICMD: return "s18,b2";
                case CompanionFileType.PRND: return "b224|b22|s10";
                case CompanionFileType.EVNT: return "s18,s10,s3,s18,s18,s18,s18,b9";
                case CompanionFileType.RESP: return "s30,b2";
                case CompanionFileType.JOBF: return "s10|s18|s18|s32|s32|r[27;b1]|s17|b1|b1|b1|b1|b2|b2|b2|s12|s12|s4|b1|b1|b1|b2|r[12;b1]|b2|b1|b2|b1|b1|b1|b1|r[8;b3]|b1|b1|b2|r[10;b1]";
                case CompanionFileType.PHON: throw new InvalidOperationException("PHON is not in use.");
                case CompanionFileType.TEXT: return "z32";
                case CompanionFileType.DIRC: return "b2";
                case CompanionFileType.ADDR: throw new InvalidOperationException("ADDR is not in use.");
                case CompanionFileType.TELD: throw new InvalidOperationException("TELD is not in use.");
                case CompanionFileType.TELV: return "b8";
                case CompanionFileType.ZONE: return "s10";
                case CompanionFileType.FEMA: return "b2";
                case CompanionFileType.DIAL: return "b3";
                case CompanionFileType.INPU: return "b2,s16,b10|b1,s16,s16,b13|b17|b5";
                case CompanionFileType.SCHD: return "r[8;b4]|s10|b6";
                case CompanionFileType.TELL: return "b2";
                case CompanionFileType.ZNAM: return "s10,s18";
                case CompanionFileType.TRAN: return "b2";
                case CompanionFileType.RNAM: return "s18,s18,b6";
                case CompanionFileType.JOBX: return "b7|b2|b2|b12|b12|b1|b2|r[8;b1]|b2|b13|r[5;b2]|b1|b2|r[5;b4]|b2|b10|b2|b6,s64|b50|s18|s10";
                case CompanionFileType.WORK: return "s10|s10|b4|b2|b2|b1|s8|r[219;b1]";
                case CompanionFileType.NOTE: return "s128";
                case CompanionFileType.RDAT: return "s8,s8";
                case CompanionFileType.CWAP: return "b4,s10,s10";
                case CompanionFileType.IPSH: return "s50,s50,s50,b2,s50,s4,b50";
                case CompanionFileType.IUSR: return "s50,s50,s50,s50,b56";
                case CompanionFileType.PAGR: return "s18,b14";
                case CompanionFileType.REMS: return "b7|b3|b7|s160|b2|b4|s20,b5|s10,b4,s10|b24";
                case CompanionFileType.LTXT:
                    return useAlternate == false ? "c64" : "b64";

                default: return string.Empty;
            }
        }
コード例 #3
0
        public static int RecordSize(CompanionFileType fileType)
        {
            switch (fileType)
            {
                case CompanionFileType.FGRP: return 128;
                case CompanionFileType.MGRP: return 48;
                case CompanionFileType.DVIC: return 48;
                case CompanionFileType.XMTR: return 2;
                case CompanionFileType.RCVR: return 24;
                case CompanionFileType.ICMD: return 20;
                case CompanionFileType.PRND: return 256;
                case CompanionFileType.EVNT: return 112;
                case CompanionFileType.RESP: return 32;
                case CompanionFileType.JOBF: return 256;
                case CompanionFileType.PHON: throw new InvalidOperationException("PHON is not in use.");
                case CompanionFileType.TEXT: return 32;
                case CompanionFileType.DIRC: return 2;
                case CompanionFileType.ADDR: throw new InvalidOperationException("ADDR is not in use.");
                case CompanionFileType.TELD: throw new InvalidOperationException("TELD is not in use.");
                case CompanionFileType.TELV: return 8;
                case CompanionFileType.ZONE: return 10;
                case CompanionFileType.FEMA: return 2;
                case CompanionFileType.DIAL: return 3;
                case CompanionFileType.INPU: return 96;
                case CompanionFileType.SCHD: return 48;
                case CompanionFileType.TELL: return 2;
                case CompanionFileType.ZNAM: return 28;
                case CompanionFileType.TRAN: return 2;
                case CompanionFileType.RNAM: return 42;
                case CompanionFileType.JOBX: return 256;
                case CompanionFileType.WORK: return 256;
                case CompanionFileType.NOTE: return 128;
                case CompanionFileType.RDAT: return 16;
                case CompanionFileType.CWAP: return 24;
                case CompanionFileType.IPSH: return 256;
                case CompanionFileType.IUSR: return 256;
                case CompanionFileType.PAGR: return 32;
                case CompanionFileType.REMS: return 256;
                case CompanionFileType.LTXT: return 64;

                default: return 0;
            }
        }
コード例 #4
0
        private byte[] LoadSectionFromReader(StreamReader reader, int expectedSize, CompanionFileType fileType)
        {
            List<byte> data = new List<byte>();

            int bytesRead = 0;

            while (bytesRead < expectedSize && !reader.EndOfStream)
            {
                string line = reader.ReadLine();
                line = line.Replace('é', 'e');

                List<byte> lineBytes = ParseLine(line);

                // Special Handling
                // RNAM - If the row appears filled with 0x255, make it a blank row.
                //    "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ","ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ",0,0,0,0,0,0
                //
                if (fileType == CompanionFileType.RNAM)
                {
                    if (lineBytes.Count == 114)
                    { // .net reads as UTF8, so a byte comparison is iffy. The row will be expanded to 114 UTF8 bytes when it is bad.
                        lineBytes = new List<byte> { 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0 };
                    }
                }

                // probably have to add PAGR and REMS as well.

                data.AddRange(lineBytes);
                bytesRead += lineBytes.Count;
            }

            return data.ToArray();
        }