C64Lib.Core.C64InternalFileSpec.Parse C# (CSharp) Method

Parse() private method

private Parse ( byte fileName ) : void
fileName byte
return void
        private void Parse(byte[] fileName)
        {
            ParseState state = ParseState.Preamble;
            byte[] nameBuffer = new byte[fileName.Length];
            int nameIndex = 0;

            if (Array.IndexOf<byte>(fileName, (byte)':') >= 0)
                state = ParseState.Preamble;
            else
                state = ParseState.FileName;

            for (int i = 0; i < fileName.Length; i++)
            {
                char ch = (char)fileName[i];

                switch (state)
                {
                    case ParseState.Preamble:
                        if (ch == ':')
                            state = ParseState.FileName;
                        break;

                    case ParseState.FileName:
                        if (ch == ',')
                            state = ParseState.Attributes;
                        else
                            nameBuffer[nameIndex++] = (byte)ch;
                        break;

                    case ParseState.Attributes:
                        switch (ch)
                        {
                            case 'P':
                                FileType = FileType.FTYPE_PRG;
                                break;
                            case 'S':
                                FileType = FileType.FTYPE_SEQ;
                                break;
                            case 'U':
                                FileType = FileType.FTYPE_USR;
                                break;
                            case 'L':
                                FileType = FileType.FTYPE_REL;
                                break;

                            case 'R':
                                AccessMode = FileAccessMode.FMODE_READ;
                                break;
                            case 'W':
                                AccessMode = FileAccessMode.FMODE_WRITE;
                                break;
                            case 'A':
                                AccessMode = FileAccessMode.FMODE_APPEND;
                                break;
                        }
                        break;

                }

                // copy the filename over
                Name = new byte[nameIndex];
                Array.Copy(nameBuffer, Name, nameIndex);

            }
        }
C64InternalFileSpec