Example #1
0
void OAuthParseJSON(char *JSON, ListNode *Vars)
{
char *ptr, *ptr2, *Token=NULL, *Name=NULL, *Value=NULL;

StripLeadingWhitespace(JSON);
StripTrailingWhitespace(JSON);
ptr=JSON+StrLen(JSON)-1;
if (*ptr=='}') *ptr='\0';
ptr=JSON;
if (*ptr=='{') ptr++;
ptr=GetToken(ptr,",",&Token,0);
while (ptr)
{
printf("TOK: %s\n",Token);
ptr2=GetToken(Token,":",&Name,0);
StripTrailingWhitespace(Name);
StripQuotes(Name);
ptr2=GetToken(ptr2,":",&Value,GETTOKEN_QUOTES);
StripLeadingWhitespace(Value);
StripTrailingWhitespace(Value);
StripQuotes(Value);
printf("JSON: %s=%s\n",Name,Value);
SetVar(Vars,Name,Value);
ptr=GetToken(ptr,",",&Token,0);
}


DestroyString(Name);
DestroyString(Value);
DestroyString(Token);
}
Example #2
0
File: glue.c Project: att/uwin
char *
AddColor(char *c, char *representation, char *l, int IsAddressd)
{
    Color *color;
    ColorTable *list = (ColorTable *)l;
    int IsAddress = 1;

    if ('"' == c[0])
    {
	StripQuotes(c);
	IsAddress = 0;
    }

    StripQuotes(representation);
    color = ColorNew(c, 0, 0, 0);

    if (IsAddress)
    {
	ColorSetAddress(color);
    }

    if (NULL == list)
    {
	list = ColorTableNew();
    }

    ColorTableAppend(list, representation, color);

    return (char *)list;
}
Example #3
0
// Ugh, this is ugly.
static bool ParseLine(const std::string& line, std::string* keyOut, std::string* valueOut, std::string* commentOut)
{
	int FirstEquals = (int)line.find("=", 0);
	int FirstCommentChar = -1;

	// Comments
	if (FirstCommentChar < 0)
		FirstCommentChar =
			(int)line.find("#", FirstEquals > 0 ? FirstEquals : 0);
	if (FirstCommentChar < 0 && line[0] == ';')
		FirstCommentChar = 0;

	// Allow preservation of spacing before comment
	while (FirstCommentChar > 0 && line[FirstCommentChar - 1] <= ' ')
	{
		FirstCommentChar--;
	}

	if ((FirstEquals >= 0) && ((FirstCommentChar < 0) || (FirstEquals < FirstCommentChar)))
	{
		// Yes, a valid key/value line!
		*keyOut = StripSpaces(line.substr(0, FirstEquals));
		if (commentOut) *commentOut = FirstCommentChar > 0 ? line.substr(FirstCommentChar) : std::string("");
		if (valueOut) *valueOut = StripQuotes(StripSpaces(line.substr(FirstEquals + 1, FirstCommentChar - FirstEquals - 1)));
		return true;
	}
	return false;
}
Example #4
0
File: glue.c Project: att/uwin
char *
InsertString(char *sl, char *s)
{
    char temp[256];
    Char8Vector *StringList = (Char8Vector *)sl;

    if (NULL == StringList)
    {
	StringList = Char8VectorNew();
    }

    if ('"' == s[0])
    {
	StripQuotes(s);
    }
    else
    {
	strcpy(&temp[1], s);
	temp[0] = '~';
	s = temp;
    }

    Char8VectorAppend(StringList, __MrmStore(s));

    return (char *)StringList;
}
Example #5
0
static TString FindOutputFile() {
    TString candidate;
    if (!out_argument.empty()) {
        candidate = StripQuotes(out_argument);
    } else if (!first_object_name.empty()) {
        candidate = first_object_name;
        if (!StripSuffix(candidate, TEXT(".obj")))
            StripSuffix(candidate, TEXT(".o"));
    } else {
        return TString();
    }
    if (PathFileExists(candidate.c_str()))
        return candidate;

    // FIXME: we should figure out from the linker's command line
    // whether the output file is an .exe or .dll
    TString exe_file = candidate + TEXT(".exe");
    if (PathFileExists(exe_file.c_str()))
        return exe_file;

    TString dll_file = candidate + TEXT(".dll");
    if (PathFileExists(dll_file.c_str()))
        return dll_file;

    return TString();
}
Example #6
0
File: glue.c Project: att/uwin
char *
bitmap(char *s)
{
    StripQuotes(s);

    return (char *)XBitmapFileNew(s);
}
Example #7
0
static char *GetAFileName( void )
/*******************************/
{
    char *fname;
    fname = CopyOfParm();
    StripQuotes( fname );
    return( fname );
}
Example #8
0
File: glue.c Project: att/uwin
char *
expr_STRING_Compound(char *st, int Separate, int IsAddress)
{
    if (!IsAddress)
    {
	StripQuotes(st);
    }

    return (char *)CStringNew(st, NULL, IsAddress, Separate);
}
Example #9
0
File: glue.c Project: att/uwin
char *
font(char *s)
{
    if ('"' == s[0])
    {
	StripQuotes(s);
    }

    return (char *)FontMNew(s);
}
Example #10
0
static bool openCmdFile(        // OPEN A COMMAND FILE
    char const *filename,       // - file name
    size_t size )               // - size of name
{
    char fnm[ _MAX_PATH ];      // - buffer for name

    stvcpy( fnm, filename, size );
    StripQuotes( fnm );
    return IoSuppOpenSrc( fnm, FT_CMD );
}
Example #11
0
static void PartyMngt_Dlg_Response(int response, const char *text) {
	PartyMngt_Dialog_Close();
	switch (PMngtData.dlgid) {
		case PDLGID_NEWPARTY:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand("~pmngt partycreate");
			}
			break;
		case PDLGID_ACCEPTINVITE:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand(va("~pmngt partyaccept %i", PMngtData.partySelection));
			}
			break;
		case PDLGID_REJECTINVITE:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand(va("~pmngt partyreject %i", PMngtData.partySelection));
			}
			break;
		case PDLGID_LEAVEPARTY:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand("~pmngt partyleave");
			}
			break;
		case PDLGID_DISBANDPARTY:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand("~pmngt partydisband");
			}
			break;
		case PDLGID_MAKELEADER:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand(va("~pmngt partychangeleader %i", PMngtData.Data.PartyMembers[PMngtData.partySelection].slotid ));
			}
			break;
		case PDLGID_DISMISSMEMBER:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand(va("~pmngt partydismiss %i", PMngtData.Data.PartyMembers[PMngtData.partySelection].slotid ));
			}
			break;
		case PDLGID_ADDTOLIST:
			if (response == PDLGRESP_OK) {
				cgImports->SendClientCommand(va("~pmngt partylistregister \"%s\"", StripQuotes((char *)text)));
			}
			break;
		case PDLGID_REMOVEFROMLIST:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand("~pmngt partylistunregister");
			}
			break;
		case PDLGID_INVITE:
			if (response == PDLGRESP_YES) {
				cgImports->SendClientCommand(va("~pmngt partyinvite %i", PMngtData.partySeeker[PMngtData.seekerSelection].id));
			}
			break;
	}
}
Example #12
0
/*
 * CD / CHDIR
 *
 */
INT cmd_chdir (LPTSTR param)
{
    TCHAR szCurrent[MAX_PATH];
    BOOL bChangeDrive = FALSE;

    /* Filter out special cases first */

    /* Print Help */
    if (!_tcsncmp(param, _T("/?"), 2))
    {
        ConOutResPaging(TRUE,STRING_CD_HELP);
        return 0;
    }

    /* Remove " */
    StripQuotes(param);

    /* Set Error Level to Success */
    nErrorLevel = 0;

    /* Print Current Directory on a disk */
    if (_tcslen(param) == 2 && param[1] == _T(':'))
    {
        if (GetRootPath(param, szCurrent, MAX_PATH))
        {
            error_invalid_drive();
            return 1;
        }
        ConOutPuts(szCurrent);
        return 0;
    }

    /* Get Current Directory */
    GetCurrentDirectory(MAX_PATH, szCurrent);
    if (param[0] == _T('\0'))
    {
        ConOutPuts(szCurrent);
        return 0;
    }

    /* Input String Contains /D Switch */
    if (!_tcsncicmp(param, _T("/D"), 2))
    {
        bChangeDrive = TRUE;
        param += 2;
        while (_istspace(*param))
            param++;
    }

    if (!SetRootPath(bChangeDrive ? NULL : szCurrent, param))
        return 1;

    return 0;
}
Example #13
0
File: glue.c Project: att/uwin
/*
 * The rvalue of an equation is a string.  Set values and return.
 */
char *
expr_STRING(char *st, char *cs, int CompoundString)
{
    char s[256];
    int i;
    FontSet *fs = (FontSet *) cs;
    char *FontName = NULL;

    if (fs)
    {
	FontName = fs->fontset.name;
    }

    for (i = 0; *st; i++)
    {
	if ('\\' == *st)
	{
	    st++;
	    while (*st && isdigit(*st))
	    {
		s[i] = s[i] * 10 + *st++ - '0';
	    }

	    if (*st != '\\')
	    {
		__MrmExit(LOC, "String ERROR\n");
	    }
	    st++;
	}
	else
	{
	    s[i] = *st++;
	}
    }

    s[i] = 0;
    st = s;

    if (CompoundString)
    {
	return (char *)CStringNew(st, FontName, 0, 0);
    }
    else
    {
	StripQuotes(st);

	return (char *)CStringNew(st, FontName, 0, 0);
    }
}
Example #14
0
bool OPT_GET_FILE               // PARSE: FILE NAME
    ( OPT_STRING **p )          // - target
{
    size_t len;
    char const *fname;

    CmdRecogEquals();
    len = CmdScanFilename( &fname );
    if( len != 0 ) {
        addString( p, fname, len );
        StripQuotes( (*p)->data );
        return( TRUE );
    }
    BadCmdLineFile();
    return( FALSE );
}
Example #15
0
File: glue.c Project: att/uwin
char *
color(char *s, char *r, char *g, char *b)
{
    if (s && s[0])
    {
	if ('"' == s[0])
	{
	    StripQuotes(s);
	}

	return (char *)ColorNew(s, 0, 0, 0);
    }
    else
    {
	return (char *)ColorNew(NULL, atoi(r), atoi(g), atoi(b));
    }
}
Example #16
0
bool OPT_GET_PATH               // PARSE: PATH
    ( OPT_STRING **p )          // - target
{
    size_t len;
    char const *path;

//    CmdPathDelim();
    CmdRecogEquals();
    len = CmdScanFilename( &path );
    if( len != 0 ) {
        addString( p, path, len );
        StripQuotes( (*p)->data );
        return( TRUE );
    }
    BadCmdLinePath();
    return( FALSE );
}
Example #17
0
File: glue.c Project: att/uwin
char *
keysym(char *s)
{
    char temp[256];

    if ('"' == s[0])
    {
	StripQuotes(s);
    }
    else
    {
	temp[0] = '~';
	strcpy(&temp[1], s);
	s = temp;
    }

    return (char *)KeysymNew(s);
}
Example #18
0
void IniFile::ParseLine(const std::string& line, std::string* keyOut, std::string* valueOut)
{
	if (line[0] == '#')
		return;

	size_t firstEquals = line.find("=", 0);

	if (firstEquals != std::string::npos)
	{
		// Yes, a valid line!
		*keyOut = StripSpaces(line.substr(0, firstEquals));

		if (valueOut)
		{
			*valueOut = StripQuotes(StripSpaces(line.substr(firstEquals + 1, std::string::npos)));
		}
	}
}
Example #19
0
bool OPT_GET_PATH_OPT           // PARSE: OPTIONAL PATH
    ( OPT_STRING **p )          // - target
{
    size_t len;
    char const *fname;

//    if( CmdPathDelim() || !CmdDelimitChar() ) {
    if( CmdRecogEquals() || !CmdDelimitChar() ) {
        // specified an '=' so accept -this-is-a-path-name.fil or /tmp/ack.tmp
        len = CmdScanFilename( &fname );
        if( len != 0 ) {
            addString( p, fname, len );
            StripQuotes( (*p)->data );
        } else {
            OPT_CLEAN_STRING( p );
        }
    }
    return( TRUE );
}
Example #20
0
static TString ProcessInputFile(const _TCHAR *file) {
    // If the file name is surrounded by quotes, remove them
    auto input_file = StripQuotes(TString(file));

	// If the file ends something other than .obj, skip it
    auto dot = PathFindExtension(input_file.c_str());
	if (dot == nullptr) {
		// MSDN says that files without an extension get .obj appended
		input_file.append(TEXT(".obj"));
	} else if (_tcsicmp(dot, TEXT(".lib")) == 0) {
        auto tmp_file = TempFile::Create(TEXT(".lib"), true);
        auto trap_status = TRaPCOFFLibrary(input_file.c_str(), tmp_file.data());
#if 0
        if (trap_status == TRaPStatus::TRAP_ERROR) {
            perror("LinkWrapper:ProcessInputFile:TRaPCOFFLibrary");
            exit(-1);
        }
#endif
        if (trap_status == TRaPStatus::TRAP_ADDED)
            return tmp_file;
        return input_file;
    } else if (_tcsicmp(dot, TEXT(".obj")) != 0 &&
               _tcsicmp(dot, TEXT(".o")) != 0) // FIXME: create a list of allowed object file extensions (or let TRaPCOFFObject detect object files itself)
		return input_file;

	// Run TrapObj.exe <file.obj> <file.obj>
	// TODO: parallelize this (using WaitForMultipleObjects)
    // FIXME: output to a temporary file instead, and erase it afterwards
    // FIXME: Trap.cpp leaks some memory
    TString output_file = input_file;
    COFFObject coff_file;
    if (!coff_file.readFromFile(input_file.c_str()))
        return output_file;
    if (coff_file.createTRaPInfo()) {
        output_file = TempFile::Create(TEXT(".obj"), true);
        coff_file.writeToFile(output_file.c_str());
    }

    // Mark this input file if it's the first
    if (first_object_name.empty())
        first_object_name = input_file;
    return output_file;
}
Example #21
0
static void scanInputFile(       // PROCESS NAME OF INPUT FILE
    void )
{
    char filename[ _MAX_PATH ]; // - scanned file name
    size_t len;                 // - length of file name
    char const *fnm;            // - file name in command line

    len = CmdScanFilename( &fnm );
    ++CompInfo.compfile_max;
    if( CompInfo.compfile_max == CompInfo.compfile_cur ) {
        if( WholeFName == NULL ) {
            stvcpy( filename, fnm, len );
            StripQuotes( filename );
            WholeFName = FNameAdd( filename );
        } else {
            CErr1( ERR_CAN_ONLY_COMPILE_ONE_FILE );
        }
    }
}
Example #22
0
bool OPT_GET_FILE_OPT           // PARSE: OPTIONAL FILE NAME
    ( OPT_STRING **p )          // - target
{
    size_t len;
    char const *fname;

    // handle leading option char specially
    if( CmdRecogEquals() || !CmdDelimitChar() ) {
        // specified an '=' so accept -this-is-a-file-name.fil or /tmp/ack.tmp
        len = CmdScanFilename( &fname );
        if( len != 0 ) {
            addString( p, fname, len );
            StripQuotes( (*p)->data );
        } else {
            OPT_CLEAN_STRING( p );
        }
    }
    return( TRUE );
}
Example #23
0
INT cmd_set (LPTSTR param)
{
	LPTSTR p;
	LPTSTR lpEnv;
	LPTSTR lpOutput;

	if ( !_tcsncmp (param, _T("/?"), 2) )
	{
		ConOutResPaging(TRUE,STRING_SET_HELP);
		return 0;
	}

	param = (LPTSTR)skip_ws(param);

	/* if no parameters, show the environment */
	if (param[0] == _T('\0'))
	{
		lpEnv = (LPTSTR)GetEnvironmentStrings ();
		if (lpEnv)
		{
			lpOutput = lpEnv;
			while (*lpOutput)
			{
				if (*lpOutput != _T('='))
					ConOutPuts(lpOutput);
				lpOutput += _tcslen(lpOutput) + 1;
			}
			FreeEnvironmentStrings (lpEnv);
		}

		return 0;
	}

	/* the /A does *NOT* have to be followed by a whitespace */
	if ( !_tcsnicmp (param, _T("/A"), 2) )
	{
		BOOL Success;
		StripQuotes(param);
		Success = seta_eval ( skip_ws(param+2) );
		if(!Success)
		{
			/*might seem random but this is what windows xp does */
			nErrorLevel = 9165;
		}
		return !Success;
	}

	if (!_tcsnicmp(param, _T("/P"), 2))
	{
		TCHAR value[1023];
		param = GetQuotedString((LPTSTR)skip_ws(param + 2));
		p = _tcschr(param, _T('='));
		if (!p)
		{
			ConErrResPuts(STRING_SYNTAX_COMMAND_INCORRECT);
			nErrorLevel = 1;
			return 1;
		}

		*p++ = _T('\0');
		ConOutPrintf(_T("%s"), GetQuotedString(p));
		ConInString(value, 1023);

		if (!*value || !SetEnvironmentVariable(param, value))
		{
			nErrorLevel = 1;
			return 1;
		}
		return 0;
	}

	param = GetQuotedString(param);

	p = _tcschr (param, _T('='));
	if (p)
	{
		/* set or remove environment variable */
		if (p == param)
		{
			/* handle set =val case */
			ConErrResPuts(STRING_SYNTAX_COMMAND_INCORRECT);
			nErrorLevel = 1;
			return 1;
		}

		*p++ = _T('\0');
		if (!SetEnvironmentVariable(param, *p ? p : NULL))
		{
			nErrorLevel = 1;
			return 1;
		}
	}
	else
	{
		/* display all environment variable with the given prefix */
		BOOL bFound = FALSE;

		while (_istspace(*param) || *param == _T(',') || *param == _T(';'))
			param++;

		p = _tcsrchr(param, _T(' '));
		if (!p)
			p = param + _tcslen(param);
		*p = _T('\0');

		lpEnv = GetEnvironmentStrings();
		if (lpEnv)
		{
			lpOutput = lpEnv;
			while (*lpOutput)
			{
				if (!_tcsnicmp(lpOutput, param, p - param))
				{
					ConOutPuts(lpOutput);
					bFound = TRUE;
				}
				lpOutput += _tcslen(lpOutput) + 1;
			}
			FreeEnvironmentStrings(lpEnv);
		}

		if (!bFound)
		{
			ConErrResPrintf (STRING_PATH_ERROR, param);
			nErrorLevel = 1;
			return 1;
		}
	}

	return 0;
}
Example #24
0
/*
 * DirReadParameters
 *
 * Parse the parameters and switches of the command line and exports them
 */
static BOOL
DirReadParam(LPTSTR Line,				/* [IN] The line with the parameters & switches */
			LPTSTR** params,			/* [OUT] The parameters after parsing */
			LPINT entries,				/* [OUT] The number of parameters after parsing */
			LPDIRSWITCHFLAGS lpFlags)	/* [IN/OUT] The flags after calculating switches */
{
	TCHAR cCurSwitch;	/* The current switch */
	TCHAR cCurChar;		/* Current examing character */
	TCHAR cCurUChar;	/* Current upper examing character */
	BOOL bNegative;		/* Negative switch */
	BOOL bPNegative;	/* Negative switch parameter */
	BOOL bIntoQuotes;	/* A flag showing if we are in quotes (") */
	LPTSTR ptrStart;	/* A pointer to the first character of a parameter */
	LPTSTR ptrEnd;		/* A pointer to the last character of a parameter */
	BOOL bOrderByNoPar;	/* A flag to indicate /O with no switch parameter */
	LPTSTR temp;

	/* Initialize parameter array */
	*params = NULL;
	*entries = 0;

	/* Initialize variables; */
	cCurSwitch = _T(' ');
	bNegative = FALSE;
	bPNegative = FALSE;

	/* We suppose that switch parameters
	   were given to avoid setting them to default
	   if the switch was not given */
	bOrderByNoPar = FALSE;

	/* Main Loop (see README_DIR.txt) */
	/* scan the command line char per char, and we process its char */
	while (*Line)
	{
		/* we save current character as it is and its upper case */
		cCurChar = *Line;
		cCurUChar = _totupper(*Line);

		/* 1st section (see README_DIR.txt) */
		/* When a switch is expecting */
		if (cCurSwitch == _T('/'))
		{
			while (*Line == _T(' '))
				Line++;

			bNegative = (*Line == _T('-'));
			Line += bNegative;

			cCurChar = *Line;
			cCurUChar = _totupper(*Line);

			if ((cCurUChar == _T('A')) ||(cCurUChar == _T('T')) || (cCurUChar == _T('O')))
			{
				/* If positive, prepare for parameters... if negative, reset to defaults */
				switch (cCurUChar)
				{
				case _T('A'):
					lpFlags->stAttribs.dwAttribVal = 0L;
					lpFlags->stAttribs.dwAttribMask = 0L;
					if (bNegative)
						lpFlags->stAttribs.dwAttribMask = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM;
					break;
				case _T('T'):
					if (bNegative)
						lpFlags->stTimeField.eTimeField = TF_MODIFIEDDATE;
					break;
				case _T('O'):
					bOrderByNoPar = !bNegative;
					lpFlags->stOrderBy.sCriteriaCount = 0;
					break;
				}

				if (!bNegative)
				{
					/* Positive switch, so it can take parameters. */
					cCurSwitch = cCurUChar;
					Line++;
					/* Skip optional leading colon */
					if (*Line == _T(':'))
						Line++;
					continue;
				}
			}
			else if (cCurUChar == _T('L'))
				lpFlags->bLowerCase = ! bNegative;
			else if (cCurUChar == _T('B'))
				lpFlags->bBareFormat = ! bNegative;
			else if (cCurUChar == _T('C'))
				lpFlags->bTSeperator = ! bNegative;
			else if (cCurUChar == _T('W'))
				lpFlags->bWideList = ! bNegative;
			else if (cCurUChar == _T('D'))
				lpFlags->bWideListColSort = ! bNegative;
			else if (cCurUChar == _T('N'))
				lpFlags->bNewLongList = ! bNegative;
			else if (cCurUChar == _T('P'))
				lpFlags->bPause = ! bNegative;
			else if (cCurUChar == _T('Q'))
				lpFlags->bUser = ! bNegative;
			else if (cCurUChar == _T('S'))
				lpFlags->bRecursive = ! bNegative;
			else if (cCurUChar == _T('X'))
				lpFlags->bShortName = ! bNegative;
			else if (cCurChar == _T('4'))
				lpFlags->b4Digit = ! bNegative;
			else if (cCurChar == _T('?'))
			{
				DirHelp();
				return FALSE;
			}
			else
			{
				error_invalid_switch ((TCHAR)_totupper (*Line));
				return FALSE;
			}

			/* Make sure there's no extra characters at the end of the switch */
			if (Line[1] && Line[1] != _T('/') && Line[1] != _T(' '))
			{
				error_parameter_format(Line[1]);
				return FALSE;
			}

			cCurSwitch = _T(' ');
		}
		else if (cCurSwitch == _T(' '))
		{
			/* 2nd section (see README_DIR.txt) */
			/* We are expecting parameter or the unknown */

			if (cCurChar == _T('/'))
				cCurSwitch = _T('/');
			else if (cCurChar == _T(' '))
				/* do nothing */;
			else
			{
				/* This is a file/directory name parameter. Find its end */
				ptrStart = Line;
				bIntoQuotes = FALSE;
				while (*Line)
				{
					if (!bIntoQuotes && (*Line == _T('/') || *Line == _T(' ')))
						break;
					bIntoQuotes ^= (*Line == _T('"'));
					Line++;
				}
				ptrEnd = Line;

				/* Copy it to the entries list */
				temp = cmd_alloc((ptrEnd - ptrStart + 1) * sizeof (TCHAR));
				if(!temp)
					return FALSE;
				memcpy(temp, ptrStart, (ptrEnd - ptrStart) * sizeof (TCHAR));
				temp[ptrEnd - ptrStart] = _T('\0');
				StripQuotes(temp);
				if(!add_entry(entries, params, temp))
				{
					cmd_free(temp);
					freep(*params);
					return FALSE;
				}

				cmd_free(temp);
				continue;
			}
		}
		else
		{
			/* 3rd section (see README_DIR.txt) */
			/* We are waiting for switch parameters */

			/* Check if there are no more switch parameters */
			if ((cCurChar == _T('/')) || ( cCurChar == _T(' ')))
			{
				/* Wrong desicion path, reprocess current character */
				cCurSwitch = _T(' ');
				continue;
			}
			/* Process parameter switch */
			switch(cCurSwitch)
			{
			case _T('A'):	/* Switch parameters for /A (attributes filter) */
				if(cCurChar == _T('-'))
					bPNegative = TRUE;
				else if(cCurUChar == _T('D'))
				{
					lpFlags->stAttribs.dwAttribMask |= FILE_ATTRIBUTE_DIRECTORY;
					if (bPNegative)
						lpFlags->stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_DIRECTORY;
					else
						lpFlags->stAttribs.dwAttribVal |= FILE_ATTRIBUTE_DIRECTORY;
				}
				else if(cCurUChar == _T('R'))
				{
					lpFlags->stAttribs.dwAttribMask |= FILE_ATTRIBUTE_READONLY;
					if (bPNegative)
						lpFlags->stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_READONLY;
					else
						lpFlags->stAttribs.dwAttribVal |= FILE_ATTRIBUTE_READONLY;
				}
				else if(cCurUChar == _T('H'))
				{
					lpFlags->stAttribs.dwAttribMask |= FILE_ATTRIBUTE_HIDDEN;
					if (bPNegative)
						lpFlags->stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_HIDDEN;
					else
						lpFlags->stAttribs.dwAttribVal |= FILE_ATTRIBUTE_HIDDEN;
				}
				else if(cCurUChar == _T('A'))
				{
					lpFlags->stAttribs.dwAttribMask |= FILE_ATTRIBUTE_ARCHIVE;
					if (bPNegative)
						lpFlags->stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_ARCHIVE;
					else
						lpFlags->stAttribs.dwAttribVal |= FILE_ATTRIBUTE_ARCHIVE;
				}
				else if(cCurUChar == _T('S'))
				{
					lpFlags->stAttribs.dwAttribMask |= FILE_ATTRIBUTE_SYSTEM;
					if (bPNegative)
						lpFlags->stAttribs.dwAttribVal &= ~FILE_ATTRIBUTE_SYSTEM;
					else
						lpFlags->stAttribs.dwAttribVal |= FILE_ATTRIBUTE_SYSTEM;
				}
				else
				{
					error_parameter_format((TCHAR)_totupper (*Line));
					return FALSE;
				}
				break;
			case _T('T'):	/* Switch parameters for /T (time field) */
				if(cCurUChar == _T('C'))
					lpFlags->stTimeField.eTimeField= TF_CREATIONDATE ;
				else if(cCurUChar == _T('A'))
					lpFlags->stTimeField.eTimeField= TF_LASTACCESSEDDATE ;
				else if(cCurUChar == _T('W'))
					lpFlags->stTimeField.eTimeField= TF_MODIFIEDDATE  ;
				else
				{
					error_parameter_format((TCHAR)_totupper (*Line));
					return FALSE;
				}
				break;
			case _T('O'):	/* Switch parameters for /O (order) */
				/* Ok a switch parameter was given */
				bOrderByNoPar = FALSE;

				if(cCurChar == _T('-'))
					bPNegative = TRUE;
				else if(cCurUChar == _T('N'))
				{
					if (lpFlags->stOrderBy.sCriteriaCount < 3) lpFlags->stOrderBy.sCriteriaCount++;
					lpFlags->stOrderBy.bCriteriaRev[lpFlags->stOrderBy.sCriteriaCount - 1] = bPNegative;
					lpFlags->stOrderBy.eCriteria[lpFlags->stOrderBy.sCriteriaCount - 1] = ORDER_NAME;
				}
				else if(cCurUChar == _T('S'))
				{
					if (lpFlags->stOrderBy.sCriteriaCount < 3) lpFlags->stOrderBy.sCriteriaCount++;
					lpFlags->stOrderBy.bCriteriaRev[lpFlags->stOrderBy.sCriteriaCount - 1] = bPNegative;
					lpFlags->stOrderBy.eCriteria[lpFlags->stOrderBy.sCriteriaCount - 1] = ORDER_SIZE;
				}
				else if(cCurUChar == _T('G'))
				{
					if (lpFlags->stOrderBy.sCriteriaCount < 3) lpFlags->stOrderBy.sCriteriaCount++;
					lpFlags->stOrderBy.bCriteriaRev[lpFlags->stOrderBy.sCriteriaCount - 1] = bPNegative;
					lpFlags->stOrderBy.eCriteria[lpFlags->stOrderBy.sCriteriaCount - 1] = ORDER_DIRECTORY;
				}
				else if(cCurUChar == _T('E'))
				{
					if (lpFlags->stOrderBy.sCriteriaCount < 3) lpFlags->stOrderBy.sCriteriaCount++;
					lpFlags->stOrderBy.bCriteriaRev[lpFlags->stOrderBy.sCriteriaCount - 1] = bPNegative;
					lpFlags->stOrderBy.eCriteria[lpFlags->stOrderBy.sCriteriaCount - 1] = ORDER_EXTENSION;
				}
				else if(cCurUChar == _T('D'))
				{
					if (lpFlags->stOrderBy.sCriteriaCount < 3) lpFlags->stOrderBy.sCriteriaCount++;
					lpFlags->stOrderBy.bCriteriaRev[lpFlags->stOrderBy.sCriteriaCount - 1] = bPNegative;
					lpFlags->stOrderBy.eCriteria[lpFlags->stOrderBy.sCriteriaCount - 1] = ORDER_TIME;
				}

				else
				{
					error_parameter_format((TCHAR)_totupper (*Line));
					return FALSE;
				}


			}
			/* We check if we calculated the negative value and realese the flag */
			if ((cCurChar != _T('-')) && bPNegative)
				bPNegative = FALSE;
		}

		Line++;
	}

	/* /O with no switch parameters acts like /O:GN */
	if (bOrderByNoPar)
	{
		lpFlags->stOrderBy.sCriteriaCount = 2;
		lpFlags->stOrderBy.eCriteria[0] = ORDER_DIRECTORY;
		lpFlags->stOrderBy.bCriteriaRev[0] = FALSE;
		lpFlags->stOrderBy.eCriteria[1] = ORDER_NAME;
		lpFlags->stOrderBy.bCriteriaRev[1] = FALSE;
	}

	return TRUE;
}
Example #25
0
static
LPSTR *
split(
    LPSTR s,
    LPINT args)
{
    LPSTR *arg;
    LPSTR start;
    LPSTR q;
    INT ac;
    INT_PTR len;
    BOOL bQuoted;

    arg = RtlAllocateHeap(ProcessHeap, 0 , sizeof(LPTSTR));
    if (arg == NULL)
        return NULL;

    *arg = NULL;

    ac = 0;
    while (*s)
    {
        bQuoted = FALSE;

        /* skip leading spaces */
        while (*s && (isspace(*s) || iscntrl(*s)))
            ++s;

        start = s;

        /* the first character can be '/' */
        if (*s == '/')
            s++;

        /* skip to next word delimiter or start of next option */
        while (isprint(*s))
        {
            /* if quote (") then set bQuoted */
            bQuoted ^= (*s == '\"');

            /* Check if we have unquoted text */
            if (!bQuoted)
            {
                /* check for separators */
                if (isspace(*s) || (*s == '/'))
                {
                    /* Make length at least one character */
                    if (s == start)
                        s++;
                    break;
                }
            }

            s++;
        }

        /* a word was found */
        if (s != start)
        {
            len = s - start;
            q = RtlAllocateHeap(ProcessHeap, 0, len + 1);
            if (q == NULL)
            {
                freep(arg);
                return NULL;
            }

            memcpy(q, start, len);
            q[len] = '\0';

            StripQuotes(q);

            if (!add_entry(&ac, &arg, q))
            {
                RtlFreeHeap(ProcessHeap, 0, q);
                freep(arg);
                return NULL;
            }

            RtlFreeHeap(ProcessHeap, 0, q);
        }
    }

    *args = ac;

    return arg;
}
Example #26
0
//
//---------------------------------------------------------
//
BOOL CEasyBDoc::ReadFile(CArchive& ar) 
{
	int i,nRtnCode,nLineCode,nSectionCode;
	int	nIndex,nValue,nOffset,nLen;
	int nPlayOffset, nPos;
	int nBidIndex = 0;
	CString strMessage,string,partString;
	CCard* pCard;
	double fValue;
	BOOL bValue;
	BOOL bFileInfoFound = FALSE;

	
	// read
	m_nLineNumber = 0;
	try
	{
		for(;;) 
		{

			nRtnCode = ReadLine(ar, strBuf);
next:		if (nRtnCode == EOF)
				break;
			if (nRtnCode == 0)
				continue;
			if ((strBuf[0] == '#') || (strBuf[0] == '*'))
				continue;
			nLineLen = nRtnCode;
			nLineCode = ParseLine(strBuf,nLineLen);
			
			if (nLineCode < 0) 
			{

				// section signifier
				nSectionCode = -nLineCode;
				if (nSectionCode == BLOCK_FILEINFO)
				{
					//
					bFileInfoFound = TRUE;
					// file info; skip this section
					do {
						nRtnCode = ReadLine(ar, strBuf);
					} while ((nRtnCode != EOF) && (strBuf.Left(2) != "[["));
					//
					goto next;
				} 
				//
				if (nSectionCode == BLOCK_FILEDESC) 
				{
					// file description; read until next block
					m_strFileDescription.Empty();
					do {
						nRtnCode = ReadLine(ar, strBuf);
						if (strBuf.Left(2) != "[[")
						{
							strBuf += "\r\n";
							m_strFileDescription += strBuf;
						}
					} while ((nRtnCode != EOF) && (strBuf.Left(2) != "[["));

					// trim ending CR/LF
					int nLen = m_strFileDescription.GetLength();
					if ((nLen >= 2) && (m_strFileDescription[nLen-1] == _T('\n')))
						m_strFileDescription = m_strFileDescription.Left(nLen-2);
					//
					goto next;
				} 
				else if (nSectionCode == BLOCK_COMMENTS) 
				{
					// file comments
					for (;;) 
					{
						nRtnCode = ReadLine(ar, strBuf);
						if ((nRtnCode == EOF) || (strBuf.Left(2) == "[[")) 
						{
							// update file comments dialog if it's open
							CWnd* pWnd = pMAINFRAME->GetDialog(twFileCommentsDialog);
							if (pWnd)
								pWnd->SendMessage(WM_COMMAND, WMS_UPDATE_TEXT, FALSE);
							goto next;
						}
						strBuf += "\r\n";
						m_strFileComments += strBuf;
					}
				}
				else if ((nSectionCode == BLOCK_SOUTH_ANALYSIS) ||
						 (nSectionCode == BLOCK_WEST_ANALYSIS) ||
						 (nSectionCode == BLOCK_NORTH_ANALYSIS) ||
						 (nSectionCode == BLOCK_EAST_ANALYSIS))
				{
					// don't bother to save the analysis
					int nPlayer = nSectionCode - BLOCK_SOUTH_ANALYSIS;
					CString strAnalysisBiffer;
					do {
						nRtnCode = ReadLine(ar, strBuf);
	//					strBuf += "\r\n";
	//					strAnalysisBiffer += strBuf;
					} while ((nRtnCode != EOF) && (strBuf.Left(2) != "[["));
	//				m_player[nPlayer].SetValueString(tszAnalysis,  strAnalysisBiffer);
					goto next;
				}

			} 
			else if (nLineCode > 0) 
			{

				// first skip spaces
				nLen = strBuf.GetLength();
				while ((nDataPosition < nLen) && 
						(strBuf[nDataPosition] == ' '))
					nDataPosition++;
				if (nDataPosition >= nLen)
					continue;
				// then get data item
				string = strBuf.Mid(nDataPosition);
				nValue = atoi(string);
				fValue = atof(string);
				if ((string == "Yes") || (string == "1"))
					bValue = TRUE;
				else
					bValue = FALSE;

				switch(nLineCode) 
				{

					case ITEM_PROGRAM_ID:
						m_strFileProgTitle = string;
						break;

					case ITEM_MAJOR_VERSIONNO:
						m_nFileProgMajorVersion = nValue;
						break;

					case ITEM_MINOR_VERSIONNO:
						m_nFileProgMinorVersion = nValue;
						break;

					case ITEM_INCREMENT_VERSIONNO:
						m_nFileProgIncrementVersion = nValue;
						break;

					case ITEM_BUILD_NUMBER:
						m_nFileProgBuildNumber = nValue;
						break;

					case ITEM_BUILD_DATE:
						m_strFileProgBuildDate = string;
						break;

					case ITEM_FILE_DATE:
						m_strFileDate = string;
						break;

					// hand info, 10..19
					case ITEM_CURRHAND_NORTH:
						AssignCards(string,NORTH);
						break;

					case ITEM_CURRHAND_EAST:
						AssignCards(string,EAST);
						break;

					case ITEM_CURRHAND_SOUTH:
						AssignCards(string,SOUTH);
						break;

					case ITEM_CURRHAND_WEST:
						AssignCards(string,WEST);
						break;

					case ITEM_ORIGHAND_NORTH:
						AssignCards(string,NORTH,TRUE);
						break;

					case ITEM_ORIGHAND_EAST:
						AssignCards(string,EAST,TRUE);
						break;

					case ITEM_ORIGHAND_SOUTH:
						AssignCards(string,SOUTH,TRUE);
						break;

					case ITEM_ORIGHAND_WEST:
						AssignCards(string,WEST,TRUE);
						break;

					// current round info
					case ITEM_CURR_ROUND_LEAD:
						m_nRoundLead = StringToPosition(string);
						break;

					case ITEM_NUM_CARDS_PLAYED_IN_ROUND:
						m_numCardsPlayedInRound = nValue;
						break;

					case ITEM_TRICK_CARD_1:
						m_pCurrTrick[0] = deck.GetCard(string);
						break;

					case ITEM_TRICK_CARD_2:
						m_pCurrTrick[1] = deck.GetCard(string);
						break;

					case ITEM_TRICK_CARD_3:
						m_pCurrTrick[2] = deck.GetCard(string);
						break;

					case ITEM_TRICK_CARD_4:
						m_pCurrTrick[3] = deck.GetCard(string);
						break;

					// game status info
					case ITEM_VIEW_STATUS_CODE:
						pVIEW->SetCurrentMode((CEasyBView::ScreenMode)nValue);
						break;

					case ITEM_RUBBER_IN_PROGRESS:
						theApp.SetValue(tbRubberInProgress, bValue);
						break;

					case ITEM_GAME_IN_PROGRESS:
						// TEMP
//						theApp.SetValue(tbGameInProgress, FALSE);
						theApp.SetValue(tbGameInProgress, bValue);
						break;

					case ITEM_BIDDING_IN_PROGRESS:
						theApp.SetValue(tbBiddingInProgress, bValue);
						break;

					case ITEM_HANDS_DEALT:
						m_bHandsDealt = bValue;
						break;
					
					case ITEM_CONTRACT_SUIT:
						nLen = string.GetLength();
						m_nContractSuit = CharToSuit(string.GetAt(0));
						break;

					case ITEM_CONTRACT_LEVEL:
						m_nContractLevel = nValue;
						break;

					case ITEM_CONTRACT_MODIFIER:
						switch(nValue) 
						{
							case 0:
								m_bDoubled = FALSE;
								m_bRedoubled = FALSE;
								m_nContractModifier = 0;
								break;
							case 1:
								m_bDoubled = TRUE;
								m_bRedoubled = FALSE;
								m_nContractModifier = 1;
								break;
							case 2:
								m_bDoubled = FALSE;
								m_bRedoubled = TRUE;
								m_nContractModifier = 2;
								break;
						}
						break;

					case ITEM_DEALER:
						m_nDealer = StringToPosition(string);
						break;

					case ITEM_NUM_BIDS:
//						m_numBidsMade = nValue;
						break;

					case ITEM_BIDDING_HISTORY:
						strBiddingHistory = string;
						break;

					case ITEM_DECLARER:
						m_nDeclarer = StringToPosition(string);
						m_nContractTeam = GetPlayerTeam(m_nDeclarer);
						m_nDefendingTeam = (m_nContractTeam == NORTH_SOUTH)? EAST_WEST : NORTH_SOUTH;
						break;

					// game record
					case ITEM_NUM_TRICKS_PLAYED:
						m_numTricksPlayed = nValue;
						break;

					case ITEM_NUM_TRICKS_WON_NS:
						m_numTricksWon[0] = nValue;
						break;

					case ITEM_NUM_TRICKS_WON_EW:
						m_numTricksWon[1] = nValue;
						break;

					case ITEM_GAME_LEAD:
						m_nGameLead = StringToPosition(string);
						break;

					case ITEM_GAME_TRICK_1: case ITEM_GAME_TRICK_2: 
					case ITEM_GAME_TRICK_3: case ITEM_GAME_TRICK_4: 
					case ITEM_GAME_TRICK_5: case ITEM_GAME_TRICK_6: 
					case ITEM_GAME_TRICK_7: case ITEM_GAME_TRICK_8: 
					case ITEM_GAME_TRICK_9: case ITEM_GAME_TRICK_10: 
					case ITEM_GAME_TRICK_11: case ITEM_GAME_TRICK_12: 
					case ITEM_GAME_TRICK_13:
						try
						{
							nIndex = nLineCode - ITEM_GAME_TRICK_1;
							nOffset = 0;
							nLen = string.GetLength();
							// first read the lead player for the trick
							partString = string.Mid(nOffset);
							m_nTrickLead[nIndex] = StringToPosition(partString);
							nOffset = string.Find(' ');
							//
							for(i=0;i<4;i++) 
							{
								while((nOffset < nLen) && (string[nOffset] == ' '))
									nOffset++;
								partString = string.Mid(nOffset);
								nOffset += 2;
								if (partString.IsEmpty()) 
								{
									strMessage.Format("Incomplete Trick record at line %d;\n%s",
													  m_nLineNumber, string);
									AfxMessageBox(strMessage);
									break;
								}
								//
								if (partString.Left(2) == "--")
								{
									m_pGameTrick[nIndex][i] = NULL;
								}
								else
								{
									pCard = deck.GetCard(partString);
									m_pGameTrick[nIndex][i] = pCard;
								}
							}
							// insert the trick record into the game record
							// in the proper order
							nPlayOffset = nIndex * 4;
							nPos = m_nTrickLead[nIndex];
							for(i=0;i<4;i++)
							{
								CCard* pCard = m_pGameTrick[nIndex][nPos];
								if (pCard)
									m_nPlayRecord[nPlayOffset+i] = pCard->GetDeckValue();
								nPos = GetNextPlayer(nPos);
							}
							// and finally read the trick's winner 
							while((nOffset < nLen) && (string[nOffset] == ' '))
								nOffset++;
							partString = string.Mid(nOffset);
							m_nTrickWinner[nIndex] = StringToPosition(partString);
						}
						catch(...)
						{
							// error
						}
						break;

					// match info
					case ITEM_SCORE_NS_BONUS:
						m_nBonusScore[NORTH_SOUTH] = nValue;
						break;

					case ITEM_SCORE_NS_GAME0:
						m_nGameScore[0][NORTH_SOUTH] = nValue;
						break;

					case ITEM_SCORE_NS_GAME1:
						m_nGameScore[1][NORTH_SOUTH] = nValue;
						break;

					case ITEM_SCORE_NS_GAME2:
						m_nGameScore[2][NORTH_SOUTH] = nValue;
						break;

					case ITEM_SCORE_NS_GAMES_WON:
						m_numGamesWon[NORTH_SOUTH] = nValue;
						break;

					case ITEM_SCORE_EW_BONUS:
						m_nBonusScore[EAST_WEST] = nValue;
						break;

					case ITEM_SCORE_EW_GAME0:
						m_nGameScore[0][EAST_WEST] = nValue;
						break;

					case ITEM_SCORE_EW_GAME1:
						m_nGameScore[1][EAST_WEST] = nValue;
						break;

					case ITEM_SCORE_EW_GAME2:
						m_nGameScore[2][EAST_WEST] = nValue;
						break;

					case ITEM_SCORE_EW_GAMES_WON:
						m_numGamesWon[EAST_WEST] = nValue;
						break;

					case ITEM_CURRENT_GAME_INDEX:
						m_nCurrGame = nValue-1;
						break;

					case ITEM_BONUS_SCORE_RECORD:
						m_strArrayBonusPointsRecord.Add(StripQuotes(string));
						break;

					case ITEM_GAME_SCORE_RECORD:
						m_strArrayTrickPointsRecord.Add(StripQuotes(string));
						break;

					// misc info
					case ITEM_AUTOSHOW_COMMENTS:
						m_bShowCommentsUponOpen = bValue;
						break;
					case ITEM_AUTOSHOW_BID_HISTORY:
						m_bShowBidHistoryUponOpen = bValue;
						break;
					case ITEM_AUTOSHOW_PLAY_HISTORY:
						m_bShowPlayHistoryUponOpen = bValue;
						break;
					case ITEM_AUTOSHOW_ANALYSES:
						m_bShowAnalysesUponOpen = bValue;
						break;

				}

			} 
			else 
			{

	/*
				// unknown line
				strMessage.Format("Found Unknown line\n%s.\nContinue?",strBuf);
				if (AfxMessageBox(strMessage, MB_ICONEXCLAMATION | MB_OKCANCEL) == IDCANCEL)
					break;
	*/
			}

		}
	}
	catch(...)
	{
		// handle any improper file error here
		ClearAllInfo();
//		AfxMessageBox("An error ocurred while reading the game file.");
		return FALSE;
	}

	// see if this was a valid file
	if (!bFileInfoFound)
	{
		AfxMessageBox("This is not a proper Easy Bridge game file.");
		AfxThrowFileException(CFileException::generic);
	}

	//
	// do some sanity checks
	//
	m_nContract = MAKEBID(m_nContractSuit, m_nContractLevel);
	if (!ISPLAYER(m_nDeclarer) || !ISBID(m_nContract))
		theApp.SetValue(tbGameInProgress, FALSE);

	//
	// parse the bidding history
	//
	if (!ISPLAYER(m_nDeclarer))
		m_nDeclarer = SOUTH;
	nPos = m_nDeclarer;
	m_nCurrPlayer = nPos;
	int nTeam = GetPlayerTeam(nPos);
	nOffset = 0;
	// 
	nLen = strBiddingHistory.GetLength();
	for(i=0;;i++) 
	{
		// skip leading spaces
		while((nOffset < nLen) && (strBiddingHistory[nOffset] == ' '))
			nOffset++;
		if (nOffset >= nLen)
			break;
		// grab the next bid
		partString = strBiddingHistory.Mid(nOffset);
		int nBid = ContractStringToBid(partString);
		// and record it
		m_nBiddingHistory[m_numBidsMade] = nBid;
		m_numBidsMade++;
		m_nCurrPlayer = GetNextPlayer(m_nCurrPlayer);
		int nBiddingRound = i % 4;
		m_nBidsByPlayer[nPos][nBiddingRound] = nBid;
		// see if this is an actual numeric bid
		if (ISBID(nBid))
		{
			m_nValidBidHistory[m_numValidBidsMade] = nBid;
			m_numValidBidsMade++;
			m_nLastValidBid = nBid;
			m_nLastValidBidTeam = nTeam;
		}
		// skip over remainder of current bid string
		while((nOffset < nLen) && (strBiddingHistory[nOffset] != ' '))
			nOffset++;
		// and move to the next player
		nPos = GetNextPlayer(nPos);
		nTeam = GetOpposingTeam(nTeam);
	}
	if (ISBID(m_nContract))
		UpdateBiddingHistory();


	// tally some figures
	m_nTotalScore[0] = m_nGameScore[0][0] + m_nGameScore[1][0] +
					   m_nGameScore[2][0] + m_nBonusScore[0];
	m_nTotalScore[1] = m_nGameScore[0][1] + m_nGameScore[1][1] +
					   m_nGameScore[2][1] + m_nBonusScore[1];

	// vulnerability
	if ((m_numGamesWon[0] > 0) && (m_numGamesWon[1] > 0)) 
	{
		m_nVulnerableTeam = BOTH;
		m_bVulnerable[0] = m_bVulnerable[1] = TRUE;
	} 
	else if (m_numGamesWon[0] > 0) 
	{
		m_nVulnerableTeam = NORTH_SOUTH;
		m_bVulnerable[0] = TRUE;
	} 
	else if (m_numGamesWon[1] > 0)
	{
		m_nVulnerableTeam = EAST_WEST;
		m_bVulnerable[1] = TRUE;
	} 
	else 
	{
		m_nVulnerableTeam = NEITHER;
	}

	//
	// set contract info
	//
	m_nContract = ContractParamsToBid(m_nContractSuit,m_nContractLevel);
	m_nTrumpSuit = m_nContractSuit;
	m_nBiddingRound = nBidIndex;
	// set play info 
	if (ISBID(m_nContract) && ISPLAYER(m_nDeclarer))
	{
		// contract has been reached
		m_nDummy = GetPartner((int) m_nDeclarer);
		m_nGameLead = GetNextPlayer(m_nDeclarer);
		m_nRoundLead = m_nGameLead;
		m_nCurrPlayer = m_nRoundLead;
		m_nTrickLead[0] = m_nRoundLead;
//		m_pPlayer[m_nDummy]->SetDummyFlag(TRUE);
//		m_pPlayer[m_nDeclarer]->SetDeclarerFlag(TRUE);
	}
	else
	{
		// contract has NOT been reached, so restart
		m_nCurrPlayer = m_nDealer;
		m_numBidsMade = 0;
	}

	// restore initial hands (temp?)
	for(i=0;i<4;i++)
		m_pPlayer[i]->RestoreInitialHand();

	// not reviewing game
	m_bReviewingGame = FALSE;

	// all done
	return TRUE;
}
Example #27
0
static const char *ParserJSONItems(int ParserType, const char *Doc, ListNode *Parent, int IndentLevel)
{
    const char *ptr;
    char *Token=NULL, *PrevToken=NULL, *Name=NULL;
    ListNode *Node;
    int BreakOut=FALSE;

    ptr=GetToken(Doc, JSON_TOKENS, &Token,GETTOKEN_MULTI_SEP|GETTOKEN_INCLUDE_SEP|GETTOKEN_HONOR_QUOTES);
    while (ptr)
    {
        switch (*Token)
        {
        case '[':
            ptr=ParserAddNewStructure(ParserType, ptr, Parent, ITEM_ARRAY, Name, IndentLevel+1);
						Name=CopyStr(Name,"");
            break;

        case ']':
            if (ptr && (*ptr==',')) ptr++;
            BreakOut=TRUE;
            break;

        case '{':
            ptr=ParserAddNewStructure(ParserType, ptr, Parent, ITEM_ENTITY, Name, IndentLevel+1);
						Name=CopyStr(Name,"");
            break;

        case '}':
            //we can have an item right before a '}' that doesn't terminate with a ',' becasue the '}' terminates it
            if (StrValid(Name) && StrValid(PrevToken))
            {
                Node=ListAddNamedItem(Parent, Name, CopyStr(NULL, PrevToken));
                Node->ItemType=ITEM_VALUE;
            }
            if (ptr && (*ptr==',')) ptr++;
            BreakOut=TRUE;
            break;

        case ':':
            Name=CopyStr(Name, PrevToken);
            break;

        case '\r':
            //ignore and do nothing
            break;

        case '\n':
        case ',':
            Node=ListAddNamedItem(Parent, Name, CopyStr(NULL, PrevToken));
            Node->ItemType=ITEM_VALUE;
            break;

        default:
            StripTrailingWhitespace(Token);
            StripQuotes(Token);
            PrevToken=CopyStr(PrevToken, Token);
            break;
        }

        if (BreakOut) break;
        while (isspace(*ptr)) ptr++;
        ptr=GetToken(ptr, JSON_TOKENS, &Token,GETTOKEN_MULTI_SEP|GETTOKEN_INCLUDE_SEP|GETTOKEN_HONOR_QUOTES);
    }

    DestroyString(PrevToken);
    DestroyString(Token);
    DestroyString(Name);
    return(ptr);
}
Example #28
0
File: cmd.c Project: Slipyx/r1q2
/*
===============
Cmd_Echo_f

Just prints the rest of the line to the console
===============
*/
void Cmd_Echo_f (void)
{
	Com_Printf ("%s\n", LOG_GENERAL, StripQuotes(Cmd_Args()));
}
Example #29
0
static int ProcOptions( char *str, int *level )
/*********************************************/
{
    char *save[MAX_NESTING];
    char *buffers[MAX_NESTING];

    if( str != NULL ) {
        for( ;; ) {
            while( *str == ' ' || *str == '\t' )
                ++str;
            if( *str == '@' && *level < MAX_NESTING ) {
                save[(*level)++] = CollectEnvOrFileName( str + 1 );
                buffers[*level] = NULL;
                str = getenv( ParamBuf );
                if( str == NULL ) {
                    str = ReadIndirectFile();
                    buffers[*level] = str;
                }
                if( str != NULL )
                    continue;
                str = save[--(*level)];
            }
            if( *str == '\0' ) {
                if( *level == 0 )
                    break;
                if( buffers[*level] != NULL ) {
                    AsmFree( buffers[*level] );
                    buffers[*level] = NULL;
                }
                str = save[--(*level)];
                continue;
            }
            if( *str == '-'  ||  *str == SwitchChar ) {
                str = ProcessOption(str+1, str);
            } else {  /* collect  file name */
                char *beg, *p;
                int len;

                beg = str;
                if( *str == '"' ) {
                    for( ;; ) {
                        ++str;
                        if( *str == '"' ) {
                            ++str;
                            break;
                        }
                        if( *str == '\0' )
                            break;
                        if( *str == '\\' ) {
                            ++str;
                        }
                    }
                } else {
                    for( ;; ) {
                        if( *str == '\0' )
                            break;
                        if( *str == ' ' )
                            break;
                        if( *str == '\t' )
                            break;
#if !defined(__UNIX__)
                        if( *str == SwitchChar )
                            break;
#endif
                        ++str;
                    }
                }
                len = str-beg;
                p = (char *) AsmAlloc( len + 1 );
                memcpy( p, beg, len );
                p[ len ] = '\0';
                StripQuotes( p );
                get_fname( p, ASM );
                AsmFree(p);
            }
        }
    }
    return( 0 );
}
Example #30
0
BOOL
PerformRedirection(REDIRECTION *RedirList)
{
	REDIRECTION *Redir;
	LPTSTR Filename;
	HANDLE hNew;
	UINT DupNumber;
	static SECURITY_ATTRIBUTES SecAttr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };

	/* Some parameters used for read, write, and append, respectively */
	static const DWORD dwAccess[] = {
		GENERIC_READ, 
		GENERIC_WRITE,
		GENERIC_WRITE
	};
	static const DWORD dwShareMode[] = {
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		FILE_SHARE_READ,
		FILE_SHARE_READ
	};
	static const DWORD dwCreationDisposition[] = {
		OPEN_EXISTING,
		CREATE_ALWAYS,
		OPEN_ALWAYS
	};

	for (Redir = RedirList; Redir; Redir = Redir->Next)
	{
		Filename = DoDelayedExpansion(Redir->Filename);
		if (!Filename)
			goto redir_error;
		StripQuotes(Filename);

		if (*Filename == _T('&'))
		{
			DupNumber = Filename[1] - _T('0');
			if (DupNumber >= 10 ||
			    !DuplicateHandle(GetCurrentProcess(),
			                     GetHandle(DupNumber),
			                     GetCurrentProcess(),
			                     &hNew,
			                     0,
			                     TRUE,
			                     DUPLICATE_SAME_ACCESS))
			{
				hNew = INVALID_HANDLE_VALUE;
			}
		}
		else
		{
			hNew = CreateFile(Filename,
			                  dwAccess[Redir->Type],
			                  dwShareMode[Redir->Type],
			                  &SecAttr,
			                  dwCreationDisposition[Redir->Type],
			                  0,
			                  NULL);
		}

		if (hNew == INVALID_HANDLE_VALUE)
		{
			ConErrResPrintf(Redir->Type == REDIR_READ ? STRING_CMD_ERROR1 : STRING_CMD_ERROR3,
			                Filename);
			cmd_free(Filename);
redir_error:
			/* Undo all the redirections before this one */
			UndoRedirection(RedirList, Redir);
			return FALSE;
		}

		if (Redir->Type == REDIR_APPEND)
			SetFilePointer(hNew, 0, NULL, FILE_END);
		Redir->OldHandle = GetHandle(Redir->Number);
		SetHandle(Redir->Number, hNew);

		TRACE("%d redirected to: %s\n", Redir->Number, debugstr_aw(Filename));
		cmd_free(Filename);
	}
	return TRUE;
}