Exemplo n.º 1
0
// alle zum Erzeuger gehörenden Abfälle locken
int CAbfSet::LockReckord (BOOL bLock, CWnd *pWnd, const char *pNummer)
{
	int iRes = LockFailed;						// noch nichts getan
	COleVariant varOldPos;
	try 
	{
		CMutex mt;
		if (!m_bCanUpDate)					// war durch anderen Nutzer
			return NothingToLock;			// gesperrt

		if (m_RecordInfoList.IsEmpty ())
			return Locked;
		
		ASSERT (IsOpen ());

		CWaitCursor wc;	
	//	ak. Satz immer zuerst behandeln
		iRes = CDaoRecordsetExt :: LockReckord (bLock, pWnd, pNummer);
		if ((LockFailed == iRes) ||					// wenn Fehler beim Locken oder
			(bLock && (NothingToLock == iRes)))		// durch anderen Nutzer gesperrt
			return iRes;

		varOldPos = GetBookmark ();		// alte Pos. speichern
		CRecordInfo *pInfo = NULL;

	//	jetzt durch alle Sätze bewegen
		POSITION pos = m_RecordInfoList.GetHeadPosition ();
		while (NULL != pos)
		{
			pInfo = m_RecordInfoList.GetNext (pos);
			ASSERT (NULL != pInfo);
			if (pInfo -> m_varBookMark == varOldPos)	// diesen Satz nicht noch mal
				continue;

			SetBookmark (pInfo -> m_varBookMark);		// akt. Satz setzen
			iRes = CDaoRecordsetExt :: LockReckord (bLock, NULL, pNummer);
			if ((LockFailed == iRes) ||				// wenn Fehler beim Locken oder
				(bLock && (NothingToLock == iRes)))	// durch anderen Nutzer gesperrt
			break;
		}		
	}
	catch (CDaoException *e)
	{
		:: DisplayDaoException (e);
		e -> Delete ();
	}
	catch (CException *e)
	{
		e -> ReportError ();
		e -> Delete ();
	}
	if (varOldPos.vt != VT_EMPTY)
		SetBookmark (varOldPos);		// wieder auf alte Position
	 
	return iRes;	
}
Exemplo n.º 2
0
//	1 oder alle Sätze der Liste löschen
//	Sätze sind gelockt !
void CAbfSet::Delete()
{
	ASSERT_VALID (this);
	ASSERT (IsOpen ());

//	wenn nur akt. Satz löschen
	if (!m_bDeleteAll)		
	{		
		CDaoRecordset::Delete ();
		return;
	}
	
	CString strOldNummer (m_Nummer);
	CRecordInfo *pInfo = NULL;
	POSITION pos = m_RecordInfoList.GetHeadPosition();
	while (pos != NULL)
	{
		pInfo = (CRecordInfo *) m_RecordInfoList.GetNext(pos);
		ASSERT (NULL != pInfo);					
		SetBookmark (pInfo -> m_varBookMark);	// auf Satz positionieren
		CDaoRecordset::Delete();				// Satz löschen
	}

	m_RecordInfoList.RemoveAll ();				// Liste wird geleert
	m_Nummer = strOldNummer;					// für Seek notwendig
}
Exemplo n.º 3
0
Type * ParseTypeInline() 
/*
Syntax: "+" full_type | "(" full_type ")" | normal_type |  identifier | int ".." exp | "-" int ".." exp
*/{
	Type * type = NULL;
	Var * var;
	UInt16 bookmark;
	BigInt * bi;

	PARSE_INLINE = true;

	if (TOK == TOKEN_OPEN_P || TOK == TOKEN_PLUS) {
		type = ParseType2(INSTR_TYPE);
	} else {
		type = ParseType3();
		if (!TOK) return NULL;
		if (type != NULL) return type;

		if (ParseArg(&var)) {
			type = TypeAllocVar(var);
		} else if (TOK == TOKEN_ID) {
			bookmark = SetBookmark();
			var = ParseVariable();
			if (TOK) {
				if (var->mode == INSTR_TYPE) {
					type = var->type;
				} else if (var->mode == INSTR_VAR && var->type->variant == TYPE_TYPE) {
					type = var->type_value;
				} else {
					ErrArg(var);
					SyntaxErrorBmk("Variable [A] does not define type.", bookmark);
				}
			}
		} else if (TOK == TOKEN_INT || TOK == TOKEN_MINUS) {
			type = TypeAlloc(TYPE_INT);
			bi = ParseIntConstExpression(NULL);
			if (TOK) {
				IntModify(&type->range.min, bi);
				if (NextIs(TOKEN_DOTDOT)) {
					bi = ParseIntConstExpression(NULL);
					if (TOK) {
						IntModify(&type->range.max, bi);
					}
				} else {
					IntModify(&type->range.max, &type->range.min);
				}
			}
		}
	}
	return type;
}
Exemplo n.º 4
0
void COXNotesEditView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	CRect rct;
	GetNotesRect(&rct);

	if (rct.PtInRect(point))
	{
		int n=HIWORD(GetEditCtrl().CharFromPos(point));
		int nChar=GetEditCtrl().LineIndex(n);
		if (IsMarked(nChar))
			RemoveBookmarks(nChar,nChar);
		else
			SetBookmark(nChar);
	}
	CEditView::OnLButtonDblClk(nFlags, point);
}
Exemplo n.º 5
0
    //
    // Execute a block of commands
    //
    void Cineractive::ExecBlock(FScope *fScope)
    {
      FScope *sScope;

      while ((sScope = fScope->NextFunction()) != NULL)
      {
        LOG_VIEWER(("Exec: [%s]", sScope->NameStr()))

        switch (sScope->NameCrc())
        {
          case 0x9D71F205: // "Movie"
          {
            // Disable movies in multiplayer campaigns
            if (!MultiPlayer::Data::Online())
            {
              if (moviePrim)
              {
                delete moviePrim;
              }
              moviePrim = new Movie(this, sScope);
            }
            break;
          }

          case 0x0DA67726: // "AlphaNear"
            Vid::renderState.status.alphaNear = alphaNear = sScope->NextArgInteger();
            break;

          case 0x70600744: // "DisableIFace"
          {
            DisableIFace(sScope->NextArgInteger());
            break;
          }

          case 0x72C1779F: // "DisableHUD"
          {
            DisableHUD(sScope->NextArgInteger());
            break;
          }

          case 0x288F19CB: // "DisableInput"
          {
            DisableInput(sScope->NextArgInteger());
            break;
          }

          case 0xAA268B85: // "DisableShroud"
          {
            DisableShroud(sScope->NextArgInteger());
            break;
          }

          case 0x47518EE4: // "EndCineractive"
          {
            Terminate();
            break;
          }

          case 0x7E8E3E05: // "SkipPoint"
          {
            RestoreDisplay();
            break;
          }

          case 0xEA4227E1: // "SetBookmark"
          {
            SetBookmark(sScope);
            break;
          }

          case 0xDDD6437A: // "DefaultCamera"
          {
            LOG_VIEWER(("DefaultCamera"))

            if (Demo::IsPlaying())
            {
              SetCurrent("Playback0", StdLoad::TypeU32(sScope, U32(FALSE), Range<U32>::flag), sScope);
            }
            else
            {
              SetCurrent("default", StdLoad::TypeU32(sScope, U32(FALSE), Range<U32>::flag), sScope);
            }
            break;
          }

          case 0xF4356EC8: // "SetCamera"
          {
            SetCurrent(sScope->NextArgString(), FALSE, sScope);
            break;
          }

          case 0x9805A0A6: // "Mesh"
          {
            AddPrim(primitiveList, new Mesh(this, sScope));
            break;
          }

          case 0x16556EBC: // "Letterbox"
          {
            AddPrim(primitiveList, new Letterbox(this, sScope));
            break;
          }

          case 0x10A95B64: // "Fade"
          {
            AddPrim(primitiveList, new Fade(this, sScope));
            break;
          }

          case 0x76802A4E: // "Image"
          {
            AddPrim(primitiveList, new Image(this, sScope));
            break;
          }

          case 0x64DD3931: // "Wallpaper"
          {
            AddPrim(primitiveList, new Wallpaper(this, sScope));
            break;
          }

          case 0xCB28D32D: // "Text"
          {
            AddPrim(primitiveList, new Text(this, sScope));
            break;
          }

          case 0x8E18DC65: // "Subtitle"
          {
            AddPrim(primitiveList, new Subtitle(this, sScope));
            break;
          }

          case 0x37345010: // "Pause"
          {
            if (!GameTime::Paused())
            {
              GameTime::Pause(FALSE);
            }
            break;
          }

          case 0x0642D599: // "Unpause"
          {
            if (GameTime::Paused())
            {
              GameTime::Pause(FALSE);
            }
            break;
          }

          case 0x3F159CC9: // "DefineDebriefing"
          {
            debriefings.Add(Crc::CalcStr(sScope->NextArgString()), sScope);
            break;
          }

          case 0x311D74EF: // "Debrief"
          {
            ProcessDebrief(sScope);
            break;
          }

          case 0x06A3B1BA: // "Action"
          {
            // Execute an objective action block
            ::Action::Execute(team, sScope);
            break;
          }

          default:
          {
            LOG_WARN(("Unknown function [%s] in Cineractive", sScope->NameStr()))
            break;
          }
        }
      }
    }
Exemplo n.º 6
0
BOOL CAbfSet::SearchNummer (const char *pNummer, BOOL bOutErrMsg /*=TRUE*/)
{
	// wenn der Erzset noch leer ist ist alles getan
	if (NULL == g_pErzSet)
		return TRUE;

//  JG den default Parameter handeln
	if (NULL == pNummer)
		pNummer = (g_pErzSet->m_Nummer);

	ASSERT (pNummer != NULL && AfxIsValidString (pNummer));
	BOOL bOk = FALSE;		// noch nichts getan

	try
	{

	//	Satz bereits geladen ?
//	das will ich ja gerade provozieren
//		if (!*pNummer || (m_Nummer == pNummer))
//			return TRUE;

		CMutex mt;
		CWaitCursor wc;
		COutputLockError le (this);

	//	akt. Satz entriegeln und speichern
		if (!LockReckord (FALSE))
			return FALSE;

	//	akt. Pos. merken
		COleVariant BookMark = GetBookmark ();

		bOutErrMsg = false;

	//	neue Nummer suchen
		if (MoveExt ("=", AFX_DAO_NEXT, pNummer))
		{
			bOk = TRUE;
		}
		else
		{
			if (bOutErrMsg)
			{
				CGakApp *pApp = (CGakApp *) AfxGetApp ();
				ASSERT (pApp != NULL);
				CString strInfo;
				AfxFormatString1 (strInfo, IDS_ABF_NOT_FOUND, pNummer);
				pApp -> OutputMessage (strInfo);	// Nachricht an Nutzer ausgeben
			}
			SetBookmark (BookMark);					// alten Satz einstell.
		}

	//	akt. Satz sperren 
		return LockReckord();
	}
	catch (CException *e)
	{
		// e -> ReportError ();		// bereits ausgegeben 
		e -> Delete ();
	}

	return bOk;
}
Exemplo n.º 7
0
//	überlagerte MoveNext-Funktion
//	die Funktion geht davon aus, daß der Index "Nummer" gesetzt ist
BOOL CAbfSet::MoveExt (const char *pS, int iDir, const char *pErzNr /* = NULL */)
{
	ASSERT_VALID (this);
	ASSERT (IsOpen ());
	ASSERT (NULL != pS && AfxIsValidString (pS));
	ASSERT ((0 == strcmp (pS, ">")) || (0 == strcmp (pS, "<")) || (0 == strcmp (pS, "=")));
	ASSERT ((AFX_DAO_NEXT == iDir) || (AFX_DAO_PREV == iDir) ||
			(AFX_DAO_FIRST == iDir) || (AFX_DAO_LAST == iDir));

	COleVariant varOldErz;			// alter Erzeuger	
	BOOL bResOp = FALSE;			// noch nichts getan
	
	try
	{
		CMutex mt;					 // dieses Codestück thread sicher machen
		CWaitCursor wc;
		varOldErz = GetBookmark ();	 // Marke von altem Erzeuger

	//	zur nächsten Abfallgruppe	
		BOOL bFirstOp = FALSE;
		switch (iDir)
		{
			case AFX_DAO_NEXT:			
			case AFX_DAO_PREV:
			{
				// JG einfach den synchronen DS finden
				if (NULL == pErzNr && NULL != g_pErzSet)
					pErzNr = (g_pErzSet->m_Nummer);

				ASSERT ((NULL != pErzNr && *pErzNr) || !m_Nummer.IsEmpty ());
#pragma MSG("JG Clean up this")
// Das wäre die Version mit Abfrage
/*				// m_strFilter strFilter;
				m_strFilter = "[Nummer] = """;
				m_strFilter += 
				pErzNr && *pErzNr ? pErzNr : m_Nummer;
				m_strFilter += """";
				Requery();
*/
				COleVariant VarNr (pErzNr && *pErzNr ? pErzNr : m_Nummer, VT_BSTRT);
				bFirstOp = Seek (pS, &VarNr);
			}
			break;
			case AFX_DAO_FIRST:
			case AFX_DAO_LAST:
			{
				CDaoRecordset :: Move (iDir);
				if (AFX_DAO_FIRST == iDir)
					iDir = AFX_DAO_NEXT;
				else
					iDir = AFX_DAO_PREV;
				bFirstOp = TRUE;
			}
			break;
			default:
				ASSERT (FALSE);
		}

	//	1. Satz gefunden ?
		if (bFirstOp)			
		{
		//	Buchmarken sammeln	
			CRecordInfoList NewList;			// neue Liste anlegen
			CRecordInfo *pInfo = NULL;			// Zeiger int.
			CString strNummer (m_Nummer);
			do
			{
			//	Infos speichern
				CRecordInfo *pInfo = new CRecordInfo (m_Abfallnummer, GetBookmark ());
				NewList.AddTail (pInfo);					
				try
				{
					CDaoRecordset :: Move (iDir);
				}
				catch (CDaoException *e)
				{
					:: DisplayDaoException (e);
					e -> Delete ();
					break;
				}
				catch (CException *e)
				{
					e -> Delete ();
					break;
				}
			}					
			while ((m_Nummer == strNummer) && !IsEOF () && !IsBOF ());					

		//	ggf. Lockmeldung ausgeben
			OutputLockErrorMessage ();

		//	jetzt auf 1. Erzeuger gehen
			POSITION pos;
			if (AFX_DAO_NEXT == iDir)
				pInfo = NewList.GetHead ();				
			else
			{
			//	letzter Satz soll 1. werden					
				pos = NewList.FindIndex (NewList.GetCount () - 1);
				pInfo = NewList.GetAt (pos);
			}

			ASSERT (NULL != pInfo);
			SetBookmark (pInfo -> m_varBookMark);
			pInfo -> m_bFirst = TRUE;

		//	jetzt Liste umkopieren
			m_RecordInfoList.RemoveAll ();			// alte Liste zuvor löschen
			pos = NewList.GetHeadPosition ();
			while (NULL != pos)
				m_RecordInfoList.AddTail (NewList.GetNext (pos));					
			NewList.CPtrList::RemoveAll ();
			bResOp = TRUE;	
			// JG
#pragma MSG("m_bValid accessing function")
//			m_bValid = TRUE;
			// alles OK		
		}	// Seek failed
		else
		{
			// hier wird zu dem alten Satz gegangen
			SetBookmark (varOldErz);				// es wurde kein weiterer Erzeuger gefunden
		}
	}
	catch (CException *e)
	{
		if (e -> IsKindOf (RUNTIME_CLASS(CDaoException)))
			::DisplayDaoException ((CDaoException*) e);
		else
			e -> ReportError ();
		if (varOldErz.vt != VT_EMPTY)
			SetBookmark (varOldErz);
		throw;										// Exception weiterleiten
	}
	
	return bResOp;		// Operationflag setzen							
}
Exemplo n.º 8
0
Type * ParseIntType()
{
	Type * type = TUNDEFINED;
	Var * var;
	Bookmark bookmark;
	UInt8 arg_no = 0;
	BigInt * bi;

	// When parsing rule, type may be preceded by %name:
	if (ParsingPattern()) {
		arg_no = ParseArgNo();
		if (arg_no > 0) {
			if (TOK == TOKEN_COLON) {
				NextToken();
			} else {
				SyntaxError("Argument name must be followed by :");
			}
		}
	}

	bookmark = SetBookmark();
	ExpectExpression(NULL);
	if (TOK) {
		var = BufPop();

		// If we parsed rule argument
		if (var->mode == INSTR_ELEMENT || VarIsRuleArg(var)) {
			type = TypeAllocVar(var);
			goto done;
		// Integer type may be defined using predefined type definition or be defined as type of other variable
		} else if (var->mode == INSTR_TYPE || var->mode == INSTR_VAR) {
			type = var->type;

			if (type->variant == TYPE_TYPE) {
				type = var->type_value;
				SetFlagOn(var->submode, SUBMODE_USED_AS_TYPE);
			}

			if (type->variant != TYPE_INT) {
				SyntaxErrorBmk("Expected integer type", bookmark);
			}
			goto done;
		} else if (var->mode == INSTR_INT) {
			type = TypeAllocConst(&var->n);
		} else {
			//TODO: If simple integer variable, use it as type range
			SyntaxErrorBmk("expected type or constant expression", bookmark);
		}

		if (TOK == TOKEN_DOTDOT) {
			NextToken();
			bookmark = SetBookmark();
			ExpectExpression(NULL);
			if (TOK) {
				var = BufPop();
				bi = VarIntConst(var);
				if (bi != NULL) {
					IntModify(&type->range.max, bi);
				} else {
					SyntaxErrorBmk("expected constant expression", bookmark);
				}
			}
		} else {
			type->range.max = type->range.min;
			type->range.min = 0;
		}

		if (type->range.min > type->range.max) {
			SyntaxErrorBmk("range minimum bigger than maximum", bookmark);
		}
	}
done:

	if (TOK) {
		if (arg_no != 0) {
			type = TypeAllocArg(arg_no, type);
		}
	}
/*
	if (TOK == TOKEN_INT) {
		type = TypeAlloc(TYPE_INT);
		type->range.min = LEX.n;
		NextToken();
		if (TOK == TOKEN_DOTDOT) {
			NextToken();
			if (TOK == TOKEN_INT) {
				type->range.max = LEX.n;
				NextToken();
			}
		} else {
			type->range.max = type->range.min;
			type->range.min = 0;
		}

		if (type->range.min > type->range.max) {
			SyntaxError("range minimum bigger than maximum");
		}
	// Sme variable
	} else if (TOK == TOKEN_ID) {
		var = VarFind2(NAME);
		if (var != NULL) {
			if (var->mode == INSTR_INT) {
				if (var->type->variant == TYPE_INT) {
					type = TypeAlloc(TYPE_INT);
					type->range.min = 0;
					type->range.max = var->n;
				} else {
					SyntaxError("Expected integer constant");
				}
			} else {
				type = var->type;
			}
			NextToken();
		} else {
			SyntaxError("$unknown variable");
		}
	} else {
		SyntaxError("Expected definition of integer type");
	}
*/
	return type;
}
Exemplo n.º 9
0
/*
Type * ParseIntRange(Type * type)
{
	Var * min, * max;
	Bookmark bookmark;

	bookmark = SetBookmark();
	ParseExpressionType(TypeType(NULL));
	if (TOK && TOP != 0) {
		min = BufPop();
		max = NULL;
		if (NextIs(TOKEN_DOTDOT)) {
			ExpectExpression(NULL);
			if (TOK) {
				max = BufPop();
				type = TypeDerive(type);
			}
		}

		if (VarIsIntConst(min) && VarIsIntConst(max)) {
			type = TypeAllocRange(min, max);

			if (type->range.min > type->range.max) {
				SyntaxErrorBmk("range minimum bigger than maximum", bookmark);
			}

		} else {
			SyntaxErrorBmk("expected type constant expression", bookmark);
		}
	}
	return type;
}
*/
Type * ParseType2(InstrOp mode)
/*
Purpose:
	Parse: <int> [".." <int>] | <var> | proc <VarList>
Input:
	mode	Type of variable for which we parse.
*/
{
	
	Var * var;
	Type * type = NULL, * variant_type = NULL;
	Var * min, * max;
	Bookmark bookmark;

next:
	type = ParseType3();
	if (!TOK) return NULL;

	if (type == NULL) {
		bookmark = SetBookmark();
		ParseExpressionType(TypeType(NULL));
		if (TOK && TOP != 0) {
			min = BufPop();
			max = NULL;
			if (NextIs(TOKEN_DOTDOT)) {
				ExpectExpression(NULL);
				if (TOK) {
					max = BufPop();
				}
			}

			type = NULL;
			if (max == NULL) {
				var = min;
				if (var->mode == INSTR_TYPE) {
					type = var->type;
				} else if (var->mode == INSTR_VAR && var->type->variant == TYPE_TYPE) {
					type = var->type_value;
					SetFlagOn(var->submode, SUBMODE_USED_AS_TYPE);
				}

				// This is directly type
				if (type != NULL) {
					// For integer type, constants may be defined
					if (type->variant == TYPE_INT) {
//						type = ParseIntRange(type);
						goto const_list;
					}
					goto done;
				}
				max = var;		
			}

			if (VarIsIntConst(min) && VarIsIntConst(max)) {
				type = TypeAllocRange(min, max);

				if (type->range.min > type->range.max) {
					SyntaxErrorBmk("range minimum bigger than maximum", bookmark);
				}

			} else {
				SyntaxErrorBmk("expected type constant expression", bookmark);
			}
		} else if (TOK == TOKEN_STRING) {
			type = TypeAlloc(TYPE_VAR);
			type->typevar = VarNewStr(NAME);
			NextToken();
		}
	}

const_list:
	// Parse type specific constants
	// There can be list of constants specified in block.
	// First thing in the block must be an identifier, so we try to open the block with this in mind.
	// We try to parse constants only for integer types (in future, we may try other numberic or string types)

	if (type != NULL && type->variant == TYPE_INT && !type->is_enum) {
		if (TOK != TOKEN_OR) {
			type = ParseConstList(type);
		}
	}
done:
	if (TOK) {
		if (variant_type != NULL) {
			variant_type->right = type;
			type = variant_type;
		}

		if (NextIs(TOKEN_OR)) {
			variant_type = TypeAlloc(TYPE_VARIANT);
			variant_type->left = type;
			goto next;
		}
	}
	return type;
}