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);
}
}