int
parse_arg(int who, char *s)
{
	int n;

/*
 *  scode() will perform an atoi() if the string is a digits-only
 *  number, or a code_to_int() if the string is a location code.
 */

	n = scode(s);

	if (n < 0)
		n = 0;

	if (n == 0 && who &&
	    subloc(who) &&
	    fuzzy_strcmp(s, "garrison"))
	{
		n = garrison_here(subloc(who));
		if (n == 0)
			n = garrison_magic;
	}

	return n;
}
Beispiel #2
0
CString CLevel::getSignCode(CString& pText)
{
	CString retVal;
	int txtLen = pText.length();
	for(int i = 0; i < txtLen; i++)
	{
		char letter = pText[i];
		if(letter == '#')
		{
			i ++;
			if(i < txtLen)
			{
				letter = pText[i];
				int code = signSymbols.find(letter);
				if(code != -1)
				{
					for(int ii = 0; ii < ctablen[code]; ii++)
						retVal.writeChar(ctab[ctabindex[code] + ii] + 32);
					continue;
				} else letter = pText[--i];
			}
		}

		int code = signText.find(letter);
		if (letter == '#') code = 86;
		if(code != -1)
			retVal.writeChar(code+32);
		else
		{
			retVal.writeChar(86 +32);	// #
			retVal.writeChar(10 +32);	// K
			retVal.writeChar(69 +32);	// (

			char buf[10];
			memset(buf, 0, 10);
			sprintf(buf,"%d", code);
			CString scode(buf);
			for (int i = 0; i < scode.length(); ++i)
			{
				int c = signText.find(scode[i]);
				if (c != -1) retVal.writeChar(c +32);
			}

			retVal.writeChar(70 +32);	// )
		}
	}
	return retVal;
}
CString encodeSignCode(CString& pText)
{
	CString retVal;
	int txtLen = pText.length();
	for (int i = 0; i < txtLen; i++)
	{
		char letter = pText[i];
		if (letter == '#')
		{
			i++;
			if (i < txtLen)
			{
				letter = pText[i];
				int code = signSymbols.find(letter);
				if (code != -1)
				{
					for (int ii = 0; ii < ctablen[code]; ii++)
						retVal.writeGChar((char)ctab[ctabindex[code] + ii]);
					continue;
				}
				else letter = pText[--i];
			}
		}

		int code = signText.find(letter);
		if (letter == '#') code = 86;
		if (code != -1)
			retVal.writeGChar((char)code);
		else
		{
			if (letter != '\r')
			{
				// Write the character code directly into the sign.
				retVal >> (char)86 >> (char)10 >> (char)69;		// #K(
				CString scode((int)letter);
				for (int i = 0; i < scode.length(); ++i)
				{
					int c = signText.find(scode[i]);
					if (scode != -1) retVal.writeGChar((char)c);
				}
				retVal >> (char)70;								// )
			}
		}
	}