void CVolume::NormalizeLabel(CString& strLabel)
{
	if (!ValidateLabel(strLabel)) return;

	strLabel.MakeUpper();
	if (strLabel.GetLength() == 2)
		strLabel += _T("\\");
	else if (strLabel.GetLength() == 1)
		strLabel += _T(":\\");
}
BOOL CVolume::SetVolume(const CString& strLabel)
{
	if (ValidateLabel(strLabel))
	{
		m_strLabel = strLabel;
		NormalizeLabel(m_strLabel);
		return TRUE;
	}
	else
	{
		m_strLabel.Empty();
		return FALSE;
	}
}
Exemple #3
0
/* Returns true if the parsing covered the whole input. */
bool ParseFirstPart()
{
	char *entryOrExternStart;

	if (NULL == part)
		return true;
	/* check for comment, assuming that a commented line must starts with a comment char */
	if (strchr(part, COMMENT_CHAR) == part)
		return true;
	/* check for label */
	if (ValidateLabel(part, LABEL_END_CHAR, true, true, labelName) > ZERO && labelName != NULL)
	{
		isLabel = true;
		return false;
	}
	else if (strstr(part, DATA_DEFINITION) != NULL)
	{ /* data array without a label */
		ParseDataArray();
		return true;
	}
	else if (strstr(part, STRING_DEFINITION) != NULL)
	{ /* string definition without a label */
		ParseStringDefinition();
		return true;
	}
	/* TODO: deal with .entry and .extern - NO LABEL ALLOWED PRIOR ! ! ! */
	else if ((entryOrExternStart = strstr(part, EXTERN_DEFINITION)) != NULL)
	{
		if (!AddEntryOrExtern(false, entryOrExternStart))
			return false;
		return true;
	}
	else if ((entryOrExternStart = strstr(part, ENTRY_DEFINITION)) != NULL)
	{
		if (!AddEntryOrExtern(true, entryOrExternStart))
			return false;
		return true;
	}
	else if (!TranslateInstruction())
	{
		char *lastError = GetLastError();

		SYNTAX_ASSERT(strcmp(lastError, EMPTY_STRING) == ZERO, lastError);
		SetLastError(EMPTY_STRING);
		return false;
	}
	return true;
}
Exemple #4
0
bool AddEntryOrExtern(bool entry, char *start)
{
	char *actual;
	size_t size;

	start += strlen(entry ? ENTRY_DEFINITION : EXTERN_DEFINITION) + 1;
	if ((actual = strpbrk(start, ABC)) == NULL)
	{
		SYNTAX_ASSERT(false, entry ? ENTRY_EXPECTING_LABEL : EXTERN_EXPECTING_LABEL);
		return false;
	}

	label = alloc(sizeof(label_type));

	if ((size = ValidateLabel(actual, LINE_TERMINATION_CHAR, true, false, label->Name)) == ZERO)
		return false;
	if (NULL != strtok(actual + strlen(label->Name), IGNORED_DELIMITERS))
	{
		SYNTAX_ASSERT(false, entry ? ENTRY_NOT_EXPECTING_MORE : EXTERN_NOT_EXPECTING_MORE);
		return false;
	}

	if (entry)
	{
		ASSERT(entryCount < MAX_ENTRIES, ENTRY_EXCEEDED_MAX);
		entries[entryCount] = label;
		entryCount++;
	}
	else
	{
		ASSERT(externCount < MAX_EXTERNS, EXTERN_EXCEEDED_MAX);
		externs[externCount] = label;
		externCount++;
	}

	return true;
}