コード例 #1
0
///////////////////////////////////////////////////////////////////////////////////////////////
// Pendant zu wsprintf() für string-Parameter;
// im Unterschied zu Format() werden hier die übergebenen Parameter auf den Stack erwartet;
// der Hauptteil dieser Routine beschäftigt sich damit, die Zeichenanzahl für den char*-Puffer
// pTmp zu ermitteln, der dann nur noch an die Bibliotheksfunktion _vstprintf() übergeben wird
void FormatV (string& rStr, LPCTSTR lpszFormat, va_list argList)
{
	TX_ASSERT (TIsValidString(lpszFormat, false));

va_list argListSave = argList;

// make a guess at the maximum length of the resulting string
int nMaxLen = 0;

	for (LPCTSTR lpsz = lpszFormat; *lpsz != '\0'; lpsz = _tcsinc(lpsz))
	{
		// handle '%' character, but watch out for '%%'
		if (*lpsz != '%' || *(lpsz = _tcsinc(lpsz)) == '%')
		{
			nMaxLen += _tclen(lpsz);
			continue;
		}

	int nItemLen = 0;

	// handle '%' character with format
	int nWidth = 0;

		for (; *lpsz != '\0'; lpsz = _tcsinc(lpsz))
		{
			// check for valid flags
			if (*lpsz == '#')
				nMaxLen += 2;   // for '0x'
			else if (*lpsz == '*')
				nWidth = va_arg(argList, int);
			else if (*lpsz == '-' || *lpsz == '+' || *lpsz == '0' ||
				*lpsz == ' ')
				;
			else // hit non-flag character
				break;
		}
		// get width and skip it
		if (nWidth == 0)
		{
			// width indicated by
			nWidth = _ttoi(lpsz);
			for (; *lpsz != '\0' && _istdigit(*lpsz); lpsz = _tcsinc(lpsz))
				;
		}
		TX_ASSERT (nWidth >= 0);

	int nPrecision = 0;

		if (*lpsz == '.')
		{
			// skip past '.' separator (width.precision)
			lpsz = _tcsinc(lpsz);

			// get precision and skip it
			if (*lpsz == '*')
			{
				nPrecision = va_arg(argList, int);
				lpsz = _tcsinc(lpsz);
			}
コード例 #2
0
///////////////////////////////////////////////////////////////////////////////////////////////
// Pendant zu wsprintf() für string-Parameter;
// die in beliebiger Anzahl übergebenen Parameter werden auf den Stack gelegt
void __cdecl Format (string& rStr, LPCTSTR lpszFormat, ...)
{
	TX_ASSERT (TIsValidString(lpszFormat, false));

va_list argList;

	va_start(argList, lpszFormat);
	FormatV(rStr, lpszFormat, argList);
	va_end(argList);
}
コード例 #3
0
/////////////////////////////////////////////////////////////////////////////
// Bestimmt den konkreten TargetPointer in Abhängigkeit von dem MerkmalsTyp
long GetMerkmalTarget (HPROJECT hPr, void *pTarget, short iTTyp)
{
	switch (iTTyp) {
	case OBL_OLD:	// direkt ObjektNummer
		TX_ASSERT((long)pTarget > 0);
		return (long)pTarget;

	case IDL_OLD:	// Identifikator ist gegeben
		{
		long ID = (long)pTarget;
		ErrInstall EI (WC_NOTFOUND);
		DB_ADDR_IDL dbaIDL(hPr);

			TX_ASSERT(ID != 0L && ID != -1L);

//			dbaIDL.file_no = IDL;
			if (z_keyfind (&dbaIDL, IDN_OLD, &ID) != EC_OKAY)
				return -1L;
			return dbaIDL.rec_no;
		}
		break;

	case SICHT:
		if (pTarget != NULL) {
		char *pSicht = new char [41];

			if (pSicht == NULL) return -1L;

			TX_ASSERT(TIsValidString ((char *)pTarget));

			memset (pSicht, '\0', 41);
			strcpy (pSicht, (char *)pTarget);

//			AnsiToOem (pSicht, pSicht);	// Zeichensatz konvertieren

		ErrInstall EI (WC_NOTFOUND);
		DB_ADDR dbaSICHT(hPr);
		long result = -1;

			dbaSICHT.file_no = SICHT;
			if (z_keyfind (&dbaSICHT, SICHTNAME, pSicht) == EC_OKAY)
				result = dbaSICHT.rec_no;
			DELETE_OBJ (pSicht);
			return result;
		} else
			return -1L;
		break;

	default:
		TX_ASSERT(false);
		break;
	}
	return -1L;
}
コード例 #4
0
HRESULT DatenBasisObjekt::DelPBDDataMerkmal (HPROJECT hPr, PBDDATA *pData)
{
	TX_ASSERT(IsTRiASDBBased());
	TX_ASSERT(NULL == pData -> pbdKText || TIsValidString(pData -> pbdKText));	

// wenns ein Ansichtsmerkmal sein soll, dann einfach wieder raus
	if ((sizeof(PBDMERKMAL) == pData -> dwSize || sizeof(PBDMERKMALEX) == pData -> dwSize) &&
		MPViewFeature == (((PBDMERKMAL *)pData) -> ipbdMTyp & 0x7F))
	{
		return S_FALSE;
	}

	TX_ASSERT(sizeof(PBDMERKMALEX) == pData -> dwSize && 0 != ((PBDMERKMALEX *)pData) -> lIdent);							// Ident muß gegeben sein

// Feature entweder über Code oder Namen löschen
CComVariant v;

	if (NULL == pData -> pbdKText) 
		v = pData -> pbdCode;
	else 
		v = pData -> pbdKText;

// Wiederauffinden des Objects-Objektes
WTRiASFeatures Feats;
WTRiASObjects Objs;
INT_PTR lIdent = ((PBDMERKMALEX *)pData) -> lIdent;

	RETURN_FAILED_HRESULT(GetObjectsFromMap (lIdent, Objs));	// Objektmenge muß existieren
	RETURN_FAILED_HRESULT(Objs -> get_Features (Feats.ppi()));

// erstmal nachsehen, ob das Merkmal existiert
bool fExists = false;

	{
	WTRiASFeature Feat;

		fExists = SUCCEEDED(Feats -> Item(v, Feat.ppi())) ? true : false;
	}
	if (fExists) {
	// nur löschen, wenns wirklich (noch) existiert)	
		RETURN_FAILED_HRESULT(Feats -> Remove (v));

	// Notifikation rumschicken
		DEXN_FeatureSetModified(lIdent);
	}
	return fExists ? S_OK : S_FALSE;	// S_FALSE heißt 'existiert nicht'
}