Esempio n. 1
0
HRESULT
AsdkSheetSet::setNewSheetLocation(char* defSheetLoc,
								 IAcSmSubset *pSubSet)
{
	if (FAILED(isInitialized("setNewSheetLocation")))
		return E_FAIL;
	
	 // lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

	CComQIPtr<IAcSmSubset> pSub = pSubSet;
	if(!pSub.p)
		// Create a category at the root
		pSub = m_pSheetSet;

	// If new sheet location is specified, release it
	if(pDefNewSheetLoc.p)
		pDefNewSheetLoc.Release();
		
    if (FAILED(pDefNewSheetLoc.CoCreateInstance(L"AcSmComponents.AcSmFileReference")))
	{
		acutPrintf("\n Cannot create file reference");
        return E_POINTER;
	}

    if (FAILED(pDefNewSheetLoc->InitNew(m_pDb)))
	{
		acutPrintf("\n Cannot initialize file reference");
        return E_FAIL;
	}

	CComBSTR bstrFileName(defSheetLoc); // sheet location

    if (FAILED(pDefNewSheetLoc->SetFileName(bstrFileName)))
	{
        return E_FAIL;
	}

	if(FAILED(pSub->SetNewSheetLocation(pDefNewSheetLoc)))
	{
		acutPrintf("\n Cannot add default sheet location");
        return E_FAIL;
	}

	// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

	return S_OK;
}
Esempio n. 2
0
HRESULT
AsdkSheetSet::addLabelBlock(char* blockName,
							char* drawingPath)
{
	if(FAILED(isInitialized("addLabelBlock")))
		return E_FAIL;
	
	 // lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

	CComPtr<IAcSmAcDbBlockRecordReference> pLabelRef = NULL;
    
	if (FAILED(pLabelRef.CoCreateInstance(L"AcSmComponents.AcSmAcDbBlockRecordReference")))
	{
		acutPrintf("\n addLabelBlock Failed!   Cannot create named object reference");
        return E_POINTER;
    }
    
	if (FAILED(pLabelRef->InitNew(m_pDb)))
        return E_FAIL;
    
	CComBSTR bstrDrawingLoc(drawingPath);
    
	if (FAILED(pLabelRef->SetFileName(bstrDrawingLoc)))
	{
		acutPrintf("\n addLabelBlock Failed!   Cannot set file %s", drawingPath);
        return E_FAIL;
	}

	CComBSTR bstrBlockName(blockName);
   
    if (FAILED(pLabelRef->SetName(bstrBlockName)))
	{
		acutPrintf("\n addLabelBlock Failed!   Cannot set block name %s", blockName);
        return E_FAIL;
	}

    if(FAILED(m_pSheetSet->SetDefLabelBlk(pLabelRef)))
	{
        return E_FAIL;
	}

	// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

    return S_OK;
}
Esempio n. 3
0
/** Maze z databaze informace o souboru.
 *
 * Presahne-li pocet smazanych polozek MAX_DELETED_ITEMS, reorganizuje
 * databazi.
 *
 * Navratove hodnoty:
 *
 *      -  1      vse OK.
 *      - -1      chyba pri vytvareni klice k souboru
 *      - -2      chyba pri zamykani/odemykani databaze
 *      - -3      chyba pri praci s databazi
 *
 */
int DirectoryDatabase::DeleteFileInfo(string &name) {
    string      key;
    datum       keyd, datad;
    int         ret;

    ret = File2Key(name.c_str(), key);
    if (ret != 1) return -1;
    
    keyd.dptr   = (char *) key.c_str();
    keyd.dsize  = key.size();

// --- zacatek KRITICKE SEKCE ---
    if (LockDatabase() != 1) return -2; 

    // otevreme databazi pro zapis
    db_file = gdbm_open((char *)db_name.c_str(), GDBM_BLOCK_SIZE, GDBM_WRITER, S_IRUSR | S_IWUSR, 0);
    if (db_file == 0) { 
#ifdef DD_DEBUG
        cout << getpid() << "DD::DFI open gdbm_errno = " << gdbm_errno << " ... " << gdbm_strerror(gdbm_errno) << endl;
#endif
        UnlockDatabase(); 
        return -3; 
    }
    

    if (gdbm_delete(db_file, keyd) != 0) {
#ifdef DD_DEBUG
        cout << getpid() << " - Informace o souboru " << name << " nelze z databaze odstranit." << endl;
#endif
        gdbm_close(db_file);
        UnlockDatabase();
        return -3;
    } else {
        
        num_of_deleted_items++; 
        if (num_of_deleted_items >= MAX_DELETED_ITEMS) {
            // gdbm samo nezmensi velikost souboru databaze, je potreba ho
            // donutit pomoci gdbm_reorganize(), ktere by se nemelo volat moc
            // casto
            if (gdbm_reorganize(db_file) != 0) {
#ifdef DD_DEBUG
                cout << getpid() << " - Nejspis se nepovedla reorganizace databaze ..." << endl;
#endif
            }
        
        }
        
    }//else
    
    gdbm_close(db_file);
    if (UnlockDatabase() != 1) return -2;
// --- konec KRITICKE SEKCE ---

    return 1;
}
Esempio n. 4
0
HRESULT
AsdkSheetSet::addResourceFileLocation(char* resourceFileLocation)
{
	if(FAILED(isInitialized("addResourceFileLocation")))
		return E_FAIL;
	
	 // lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

	CComPtr<IAcSmResources> pResources = NULL;

    if (FAILED(m_pSheetSet->GetResources(&pResources)))
        return E_FAIL;
    
   
	CComBSTR bstrResourceLoc(resourceFileLocation);

    CComPtr<IAcSmFileReference> pFileReference = NULL;
    if (FAILED(pFileReference.CoCreateInstance(L"AcSmComponents.AcSmFileReference")))
	{
        return E_POINTER;
	}

    if (FAILED(pFileReference->InitNew(m_pDb)))
	{
        return E_FAIL;
	}

    if (FAILED(pFileReference->SetFileName(bstrResourceLoc)))
	{
        return E_FAIL;
	}

    // add the resource location.
    if (FAILED(pResources->Add(pFileReference)))
        return E_FAIL;

	// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

	return S_OK;
}
Esempio n. 5
0
ULONG
NextAudioID( ULONG           id,
             struct AHIBase* AHIBase )
{
  struct AHI_AudioDatabase *audiodb;
  struct AHI_AudioMode *node;
  ULONG  nextid=AHI_INVALID_ID;

  if(AHIBase->ahib_DebugLevel >= AHI_DEBUG_HIGH)
  {
    Debug_NextAudioID(id);
  }

  audiodb = LockDatabase();

  if(audiodb != NULL)
  {
    node = (struct AHI_AudioMode *) audiodb->ahidb_AudioModes.mlh_Head;

    if(id != AHI_INVALID_ID)
    {
      while(node != NULL)
      {
        ULONG thisid;
        
        thisid = GetTagData(AHIDB_AudioID,AHI_INVALID_ID,node->ahidbn_Tags);
        node = (struct AHI_AudioMode *) node->ahidbn_MinNode.mln_Succ;

        if(thisid == id)
        {
          break;
        }
      }
    }

    if(node && node->ahidbn_MinNode.mln_Succ)
    {
      nextid = GetTagData(AHIDB_AudioID, AHI_INVALID_ID, node->ahidbn_Tags);
    }

    UnlockDatabase(audiodb);
  }

  if(AHIBase->ahib_DebugLevel >= AHI_DEBUG_HIGH)
  {
    KPrintF("=>0x%08lx\n",nextid);
  }

  return nextid;
}
Esempio n. 6
0
HRESULT
AsdkSheetSet::addSheetSelectionSet(char* selSetName,			 // Name of selection set
					     		   char* selSetDesc,			 // Description 
							       IAcSmSheetSelSet **pSelSet) // Output pointer to selection set
{

	if(FAILED(isInitialized("addSheetSelectionSet")))
		return E_FAIL;
	
	 // lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

	CComPtr<IAcSmSheetSelSets> pSelSetS = NULL;
    if (FAILED(m_pSheetSet->GetSheetSelSets(&pSelSetS)) || (pSelSetS == NULL))
    {
		acutPrintf("\n addSheetSelectionSet failed! Cannot get selection sets!!");
        return E_FAIL;
    }
  

    // add a selection set to the selection set collection of the sheet set
    CComBSTR selSet(selSetName);
    CComBSTR selDesc(selSetDesc);

    if (FAILED (pSelSetS->Add(selSet, selDesc, pSelSet)))
    {
		acutPrintf("\n addSheetSelectionSet failed! Cannot add selection set %s!!", selSetName);
        return E_FAIL;
    }

	// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

    return S_OK;
}
Esempio n. 7
0
HRESULT
AsdkSheetSet::createNestedCategory(char* categoryName,		   // Category Name
							       char* categoryDesc,		   // Category Description
								   IAcSmSubset *pParentSet,    // Parent category 
								   IAcSmSubset **pNewSubset  // OUT - Newly created category		
								  )
{
	if(FAILED(isInitialized("createNestedCategory")))
		return E_FAIL;
	
	 // lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

	CComQIPtr<IAcSmSubset> pSubSet = pParentSet;
	if(!pSubSet.p)
		// Create a category at the root
		pSubSet = m_pSheetSet;

	CComBSTR bstrCatName(categoryName); // Category name
	CComBSTR bstrCatDesc(categoryDesc); // Category description

	// create a new subset 
	if(FAILED(pSubSet->CreateSubset(bstrCatName, bstrCatDesc, pNewSubset)))
	{
		acutPrintf("\n Subset creation failed");
		return E_FAIL;
	}

	// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

	return S_OK;
}
Esempio n. 8
0
/** Konstruktor.
 * Otevre databazi pro zadany adresar (dir), predpoklada, ze se soubor databaze (name)
 * nachazi v aktualnim adresari. Pokud selze otevreni databaze (napriklad nekdo
 * zmenil prava souboru na 000), hodi vyjimku GdbmError. Databazi otevre jen
 * pro cteni.
 * Implicitne da ingore_hidden na true.
 */ 
DirectoryDatabase::DirectoryDatabase(const char *name) throw(FileError, GdbmError)
{
    
    db_name = name;
    lock_name = name;
    lock_name = lock_name + "_gdbm_lock";
    // je mozne, ze name bude obsahovat i cestu - zamek se tedy bude vytvaret v
    // miste, kde je ulozena databaze - nemohou tam byt dva soubory stejneho
    // jmena, takze je vse OK.


#ifdef DD_DEBUG
    cout << getpid() << " - creating database " << db_name << endl;
#endif

    ignore_hidden = true;
    num_of_deleted_items = 0;
    locked = false;
        
    /* vytvorime novou databazi, nastavime souboru pravo cteni a zapisu,
     * fatal_func() nechame defaultni (0) */
    if (LockDatabase() == -1) {
        string msg;
        msg = "Nepodarilo se zamknout databazi. Program mozna nebyl naposledy ciste ukoncen. Zkontrolujte prosim, ";
        msg = msg + "jestli neexistuje soubor " + lock_name + " a smazte jej.";
        throw FileError(msg.c_str(), -1);
    }
    
// --- zacatek KRITICKE SEKCE ---

    //pokud databaze neexistuje, vytvorime ji
    
    db_file = gdbm_open((char *)db_name.c_str(), GDBM_BLOCK_SIZE, GDBM_WRCREAT, S_IRUSR | S_IWUSR, 0);
    if (db_file == 0) throw GdbmError();
    gdbm_close(db_file);
    if (UnlockDatabase() == -1) throw FileError("DirectoryDatabase(): Nepodarilo se odemknout databazi.", -1);
    
// --- konec KRITICKE SEKCE ---
    
}
Esempio n. 9
0
HRESULT
AsdkSheetSet::addCalloutBlock(char* blockName,
							  char* drawingName)
{
	if(FAILED(isInitialized("addCalloutBlock")))
		return E_FAIL;

	// lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

	CComPtr<IAcSmCalloutBlocks> pCalloutBlk = NULL;
	if (FAILED(m_pSheetSet->GetCalloutBlocks(&pCalloutBlk)))
	{
		acutPrintf("\n addCalloutBlock failed! Cannot get callout blocks!!");
		return E_FAIL;
	}

	CComBSTR bstrBlockName(blockName);
	CComBSTR bstrFileName(drawingName);

	CComPtr<IAcSmAcDbBlockRecordReference> pCalloutRef = NULL;
	if (FAILED(pCalloutRef.CoCreateInstance(L"AcSmComponents.AcSmAcDbBlockRecordReference")))
	{
		acutPrintf("\n addCalloutBlock failed! Cannot get named object reference!!");
		return E_POINTER;
	}
		

	if (FAILED(pCalloutRef->InitNew(m_pDb)))
		return E_FAIL;

	if (FAILED(pCalloutRef->SetFileName(bstrFileName)))
	{
		acutPrintf("\n addCalloutBlock failed! Cannot set file name %s!!", drawingName);
		return E_FAIL;
	}

	if (FAILED(pCalloutRef->SetName(bstrBlockName)))
	{
		acutPrintf("\n addCalloutBlock failed! Cannot set block name %s!!", blockName);
		return E_FAIL;
	}
	 
	if(FAILED(pCalloutBlk->Add(pCalloutRef)))
	{
		acutPrintf("\n addCalloutBlock failed! Cannot add callout reference!!");
		return E_FAIL;
	}

		// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

	return S_OK;
}
Esempio n. 10
0
/** Uklada do databaze informace o souboru.
 * 
 * K vytvoreni klice pouziva File2Key.
 *
 * Navratove hodnoty:
 *
 *      -  1      vse OK.
 *      - -1      chyba pri vytvareni klice k souboru
 *      - -2      chyba pri zamykani/odemykani databaze
 *      - -3      chyba pri praci s databazi
 */
int DirectoryDatabase::PutFileInfo(FileInfo &file) {
    string              key;
    datum               keyd, datad;
    FileInfoGdbmRecord  file_record; //data, ktera budou ulozena do databaze
    int                 store_err;
    int                 open_err;
    int                 ret;
    
    ret = File2Key(file.name.c_str(), key);
    if (ret != 1) return -1;
    
    keyd.dptr   = (char *)key.c_str();
    keyd.dsize  = key.size();
    
    file_record = (FileInfoGdbmRecord) file; //pretypujeme FileInfo na nas zaznam
    datad.dptr  = (char *)&file_record;
    datad.dsize = sizeof(struct FileInfoGdbmRecord);

    
#ifdef DD_DEBUG
    cout << getpid() << " - DD::PutFileInfo ... storing " << file_record.name << " juzra: " << file_record.user_name
         << " with i-node# " << key << " user_rights = " << file_record.user_rights << " in da dejtabejz" << endl;
#endif
    
// --- zacatek KRITICKE SEKCE ---
    if (LockDatabase() != 1) return -2;

    // otevreme databazi pro zapis
    db_file = gdbm_open((char *)db_name.c_str(), GDBM_BLOCK_SIZE, GDBM_WRITER, S_IRUSR | S_IWUSR, 0);
    if (db_file == 0) { //nastala chyba
#ifdef DD_DEBUG
        cout << getpid() << "DD::PFI open gdbm_errno = " << gdbm_errno << " ... " << gdbm_strerror(gdbm_errno) << endl;
#endif
        UnlockDatabase(); 
        return -3; 
    }
    
    //ulozime data
    int err = gdbm_store(db_file, keyd, datad, GDBM_REPLACE);
    if (err != 0) { 
#ifdef DD_DEBUG
        cout << getpid() << "DD::PFI store gdbm_errno = " << gdbm_errno << " ... " << gdbm_strerror(gdbm_errno) << endl;
#endif
        gdbm_close(db_file); //musime, viz komentar niz
        UnlockDatabase(); 
        return -3; 
    }
    
    //databazi zase musime zavrit!!! aby ostatni procesy mohly cist a
    //zapisovat !!!
    gdbm_close(db_file);
    ret = UnlockDatabase();
    if (ret != 1){ 
        return -2;
    }
// --- konec KRITICKE SEKCE ---
    
#ifdef DD_DEBUG
    cout << getpid() << " - DD::PutFileInfo ... stored" << endl;
#endif
    
    return 1;
}
Esempio n. 11
0
HRESULT 
AsdkSheetSet::addSheet(IAcSmSheet** pNewSheet,
					   IAcSmSubset* pParentCategory,
                       char* sheetName,
					   char* sheetDesc,
					   char* layoutName,
					   char* layoutDwgPath)
{
	
	if (FAILED(isInitialized("addSheet")))
		return E_FAIL;
	
	// Sheet subset or category
	CComQIPtr<IAcSmSubset> pSubSet;
	
	 // lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

    if(!pParentCategory)
	{
        // insert sheet at root
        pSubSet = m_pSheetSet;
	}
    else
        pSubSet = pParentCategory;
        
    // Add a sheet to sheet root or sub-category
    // A new sheet based on a dwt can be added *only* if the following 2 conditions are satisfied
    // 1.  A default drawing template (which *should* contain a sheet/layout ) 
    //     is set up for the sheet set
    // 2.  A default location where the new sheet will be placed is set up
    //	   for the sheet set
	if(!isValid(layoutName))
	{
		// Check for above conditions
		if((pDefDwtLayoutRef.p == NULL) || (pDefNewSheetLoc.p == NULL))
		{
			acutPrintf("\n Cannot add new sheet %s!!", sheetName);
		}   else
		{
		
			// If layoutName is invalid, 
			// create a fresh sheet (not based on existing layout)
			
			CComBSTR bstrSheetName(sheetName); // sheet name
			CComBSTR bstrSheetDesc(sheetDesc); // sheet description

			HRESULT hr;
			if(FAILED(hr  =pSubSet->AddNewSheet(bstrSheetName, bstrSheetDesc, pNewSheet)))
			{
				acutPrintf("\n Cannot add new sheet");
				return E_FAIL;
			}	
		}
		
	} else
	// add a sheet based on existing layout
	{
		 CComPtr<IAcSmAcDbLayoutReference> pLayoutRef;

		// create the NamedAcDbObjectReference.
		if(FAILED(pLayoutRef.CoCreateInstance(L"AcSmComponents.AcSmAcDbLayoutReference")))
		{ 
			acutPrintf("\n Cannot create named object reference");
			return E_FAIL;
		}

		if(FAILED(pLayoutRef->InitNew(m_pSheetSet)))
		{
			acutPrintf("\n Cannot initialize layout");
			return E_FAIL;
		}

		CComBSTR bstrLayoutName(layoutName); // layout name

		// Set layout name
		if(FAILED(pLayoutRef->SetName(bstrLayoutName)))
		{
			acutPrintf("\n Cannot set layout name");
			return E_FAIL;
		}

		CComBSTR bstrDwgName(layoutDwgPath); // layout drawing name
			
		// Set layout drawing name
		if(FAILED(pLayoutRef->SetFileName(bstrDwgName)))
		{
			acutPrintf("\n Cannot set layout drawing name");
			return E_FAIL;
		}

		// Import the sheet into the sheet set by passing the 
		// IAcSmNamedAcDbObjectReference 
		// - which is a SheetSet reference to a layout 
		if(FAILED(pSubSet->ImportSheet(pLayoutRef, pNewSheet)))
		{
			acutPrintf("\n Failed to import sheet %s", layoutDwgPath);
			return E_FAIL;
		}

		// insert the component(sheet) 
		if(FAILED(pSubSet->InsertComponent(*pNewSheet, NULL)))
		{
			acutPrintf("\n Failed to insert sheet");
			return E_FAIL;
		}
	}

	// set the sheet number.
	CString sFormat;
	sFormat.Format("%d", m_nSheetCount + 1);
	CComBSTR bstrSheetNumber = sFormat.AllocSysString();
	if(pNewSheet && FAILED((*pNewSheet)->SetNumber(bstrSheetNumber)))
	{
		acutPrintf("\n Failed to set sheet number");
		return E_FAIL;
	}

	// Increment sheet count
	m_nSheetCount++;	

	// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

	return S_OK;
}
Esempio n. 12
0
HRESULT 
AsdkSheetSet::create(char* name,		
					 char* path,		
					 char* description,
					 char* templPath,
					 char* defSheetLoc)
{
	BOOL  bAlwaysCreate = TRUE;
	CComBSTR bstrSSName(name);	 // Sheet set name
	HRESULT hr;
	
	// If sheet set manager doesnt exist, create one
	if(!m_pSSetMgr.p)
	{
		if (FAILED(m_pSSetMgr.CoCreateInstance(CLSID_AcSmSheetSetMgr)))
		{
			acutPrintf("\n Error Cannot get sheet set manager!!");	
			return E_FAIL;
		}
	}
	 
	char fullPath[255];
	strcpy(fullPath, path);

	// If no trailing backslash entered, add it
	if (strcmp("\\" , &fullPath[strlen(fullPath)-1]) != 0)
		strcat(fullPath, "\\");

	// check if folder exists
	if(_access(fullPath,0))
	{
		acutPrintf("\n Error: Folder does not exist. Specify another folder!!!");
		return E_FAIL;
	}

	if(!strstr(name,".dst"))
		strcat(name, ".dst");	

	strcat(fullPath, name);
	
	CComBSTR bstrPath(fullPath);
	AcSmLockStatus lockStatus;
	
	// check if file exists 
	// If so, ask the user whether to overwrite or open existing
	if(!_access(fullPath,0))
	{
	   if(!getYorN("\n File exists!! Overwrite existing?"))
	   {
	    	// Don't overwrite existing
			// Just open the file
			// 2nd parameter = FALSE means don't fail if already open
			if(FAILED(m_pSSetMgr->OpenDatabase(bstrPath, FALSE, &m_pDb)))
			{
				acutPrintf("\n Error: Cannot open database!!");
				return E_FAIL;
			}
			
			// get the sheet set from the database.
			if (FAILED(m_pDb->GetSheetSet(&m_pSheetSet)))
			{  
				acutPrintf("\n Error: Cannot get sheet set");
				return E_FAIL;
			}
			
			return E_ABORT;
		}
	}  
	
	// create the database for the sheet set
	// bAlwaysCreate lets you override the existing file if it's set to true
	if (FAILED(hr = m_pSSetMgr->CreateDatabase(bstrPath, NULL, bAlwaysCreate, &m_pDb)))
	{
		acutPrintf("\nError: Cannot create database!");
		if (E_INVALIDARG == hr)
			acutPrintf("\n File name invalid!");		
		return E_FAIL;
	}

	
	 // lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Error: Database lock failed!");
        return E_FAIL;
	}

	CComBSTR bstrDesc(description);
	
	// set the sheet set db name, description = sheet set name, description
	 if (FAILED(m_pDb->SetName(bstrSSName)))
	 {
		acutPrintf("\n Error: Cannot set database name");
		return E_FAIL;
	 }
	 
	 if (FAILED(m_pDb->SetDesc(bstrDesc)))
	 {
		acutPrintf("\nError: Cannot set database description!");
		return E_FAIL;
	 }
	
	    // get the sheet set from the database.
    if (FAILED(m_pDb->GetSheetSet(&m_pSheetSet)))
	{  
		acutPrintf("\n Error: Cannot get sheet set");
        return E_FAIL;
	}

	// set the name and description to the sheet set
	if (FAILED(m_pSheetSet->SetName(bstrSSName)))
	{
		acutPrintf("\nError: Cannot set name!");
        return E_FAIL;
	}


    if (FAILED(m_pSheetSet->SetDesc(bstrDesc)))
	{
		acutPrintf("\nError: Cannot set description!");
        return E_FAIL;
	}

	if(isValid(templPath))
	{
		// set default template for layout at sheet set level
		overrideDefaultDWTLayout(templPath, m_pSheetSet);
	}

	if(isValid(defSheetLoc))
	{
		// set default sheet location
		setNewSheetLocation(defSheetLoc, m_pSheetSet);
	}

	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}
    else
		acutPrintf("\n Sheet set %s created", fullPath);
	
	return S_OK;

}
Esempio n. 13
0
/** Nahraje do databaze soubory ze zadaneho adresare.
 * Pokud uz v databazi nektery ze souboru je, nebude prepsan.
 *
 * Navratove hodnoty:
 *
 *      -  1      vse OK.
 *      - -1      chyba pri vytvareni klice k souboru
 *      - -2      chyba pri zamykani/odemykani databaze
 *      - -3      chyba pri praci s databazi
 *      - -5      chyba pri otvirani adresare
 * 
 */
int DirectoryDatabase::LoadSubDir(string &name) {
    DIR                 *dir;
    struct dirent       *entry;
    int                 ret;
    
    if ((dir = opendir(name.c_str()) ) == 0) {
       // string msg;
       // msg = "Adresar " + name + " nebylo mozne otevrit.";
        return -5;
    }
    
    string              tmp;
    string              key;
    datum               keyd, datad;
    FileInfoGdbmRecord  file_record; //data, ktera budou ulozena do databaze
    
// --- zacatek KRITICKE SEKCE ---
    if (LockDatabase() != 1) return -2; 
    gdbm_close(db_file);
    // otevreme databazi pro zapis
    db_file = gdbm_open((char *)db_name.c_str(), GDBM_BLOCK_SIZE, GDBM_WRITER, S_IRUSR | S_IWUSR, 0);
    if (db_file == 0) { UnlockDatabase(); return -3; }

    while ((entry = readdir(dir)) != 0) {
        tmp = entry->d_name;
        if (tmp == "." || tmp == "..") continue;
        if (tmp.substr(0,1) == "." && ignore_hidden) continue;
    
        ret = File2Key(tmp.c_str(), key);
        if (ret != 1) return -1;
        keyd.dptr   = (char *)key.c_str();
        keyd.dsize  = key.size();
    
        file_record.user_name[0] = 0;
        strncpy(file_record.name, tmp.c_str(), MAX_FILE_NAME_LEN);
        file_record.name[MAX_FILE_NAME_LEN-1] = 0;// pro jistotu, kdyby byl nazev souboru moc dlouhy
        file_record.user_rights   = R_ALL;
        file_record.others_rights = R_ALL;
        
        datad.dptr  = (char *)&file_record;
        datad.dsize = sizeof(struct FileInfoGdbmRecord);


#ifdef DD_DEBUG
        cout << getpid() << " - LoadSubDir ... storing " << file_record.name << " juzra: " << file_record.user_name 
            << " with i-node# " << key << " rights = " << file_record.user_rights << " in da dejtabejz" << endl;
#endif
    
        int err = gdbm_store(db_file, keyd, datad, GDBM_INSERT);
        if (err != 0 && gdbm_errno != GDBM_CANNOT_REPLACE) return -3;
        // pokud bychom prepsali data v databazi, mohli bychom prijit o
        // spravne udaje o pravech a juzrovi, proto store s GDBM_INSERT
        // pokud uz zaznam existuje hodi, hodi chybu GDBM_CANNOT_REPLACE,
        // definice kodu chyb je v /usr/inlcude/gdbm/gdbm.h
    } //while
    
    gdbm_close(db_file);
    if (UnlockDatabase() != 1) return -2;
// --- konec KRITICKE SEKCE ---
    
    //otevreme databazi zpet pro cteni
    db_file = gdbm_open((char *)db_name.c_str(), GDBM_BLOCK_SIZE, GDBM_READER, S_IRUSR | S_IWUSR, 0);
    if (db_file == 0)  { UnlockDatabase(); return -3; }
    return 1;
}
Esempio n. 14
0
/** Ziska z databaze informace o zadanem souboru.
 * 
 * Navratove hodnoty:
 *
 *      -  1      vse OK.
 *      - -1      chyba pri vytvareni klice k souboru
 *      - -3      chyba pri praci s databazi
 *
 */
int DirectoryDatabase::GetFileInfo(string name, FileInfo &info) {
    string      key;
    datum       keyd, datad;
    int         ret;
    
    
    ret = File2Key(name.c_str(), key);
    if (ret != 1) return -1;
    
    keyd.dptr   = (char *) key.c_str();
    keyd.dsize  = key.size();
    
// --- zacatek KRITICKE SEKCE ---
    if (LockDatabase() != 1) return -2;

    // otevreme databazi pro cteni
    db_file = gdbm_open((char *)db_name.c_str(), GDBM_BLOCK_SIZE, GDBM_READER, S_IRUSR | S_IWUSR, 0);
    if (db_file == 0) { //nastala chyba
#ifdef DD_DEBUG
        cout << getpid() << "DD::GFI open gdbm_errno = " << gdbm_errno << " ... " << gdbm_strerror(gdbm_errno) << endl;
#endif
        UnlockDatabase(); 
        return -3; 
    }

    datad = gdbm_fetch(db_file, keyd);
    if (datad.dptr == 0) {
#ifdef DD_DEBUG
        cout << getpid() << " - soubor " << name << " nebyl v databazi nalezen. ";
        cout << "gdbm_errno = " << gdbm_errno << " ... " << gdbm_strerror(gdbm_errno) << endl;
#endif
        gdbm_close(db_file);
        UnlockDatabase(); 
        return -3;
    }

    //databazi zase musime zavrit!!! aby ostatni procesy mohly cist a
    //zapisovat !!!
    gdbm_close(db_file);
    
    ret = UnlockDatabase();
    if (ret != 1){ 
        return -2;
    }
// --- konec KRITICKE SEKCE ---
    
    FileInfoGdbmRecord record;
    memcpy(&record, datad.dptr, datad.dsize);
    //cout << "get file info: free(datad.dptr)" << endl;
    free(datad.dptr); // nutne uvolnit misto na ktere ukazuje datad.dptr --> gdbm to samo neudela!!!

#ifdef DD_DEBUG
    cout << getpid() << " - GetFileInfo: ke klici " << key << "jsme dostali informace o " << record.name << endl;
#endif
    
    FileInfo result;
    result = record;
   
    info = result;
    
    return 1;
}
Esempio n. 15
0
HRESULT
AsdkSheetSet::addCustomProperty(char* key,             // Property name
			  				    char* value,	       // Property value
								IAcSmComponent *pComp, // Component to add custom properties to
								PropertyFlags propertyFlag) // Property flag which specifies
														    // whether to inherit properties 
															// for all sheets in the sheet set
															// or to only apply at sheet set level
							   
{

	if(FAILED(isInitialized("addCustomProperty")))
		return E_FAIL;
		
	CComQIPtr<IAcSmComponent> pCmp;

	if (!pComp)
		// if null, create properties for sheet set
		pCmp = m_pSheetSet;
	else
		pCmp = pComp;

	// lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

	 // Add one custom property at the sheet set level
    CComPtr<IAcSmCustomPropertyBag> pBag = NULL;

    if(FAILED(pCmp->GetCustomPropertyBag(&pBag)))
    {
        acutPrintf("\nError: custom property bag.");
        return E_FAIL;
    }

    CComPtr<IAcSmCustomPropertyValue> pPropVal;
    if (FAILED(pPropVal.CoCreateInstance(L"AcSmComponents.AcSmCustomPropertyValue")))
    {
        acutPrintf("\nError: initializing custom property.");
        return E_POINTER;
    }

    if(FAILED(pPropVal->InitNew(pBag)))
    {
        acutPrintf("\nError: initializing custom property value.");
        return E_FAIL;
    }

	HRESULT hr;
    // set the property flag.
    if(FAILED(( hr = pPropVal->SetFlags((PropertyFlags)propertyFlag))))
    {
        acutPrintf("\nError: setting custom property flag.");
        return E_FAIL;
    } 

	// set the property name(key)
	CComBSTR propName(key);
    if(FAILED(pBag->SetProperty(propName, pPropVal)))
    {
        acutPrintf("\nError: attaching custom property to sheet set.");
        return E_FAIL;
    }

	// set the property value(for the key)
    CComVariant val(value);
    if(FAILED(pPropVal->SetValue(val)))
    {
        acutPrintf("\nError: setting custom property value.");
        return E_FAIL;
    }

	// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

	return S_OK;
}
Esempio n. 16
0
ULONG
GetAudioAttrsA( ULONG                    id,
                struct AHIPrivAudioCtrl* actrl,
                struct TagItem*          tags,
                struct AHIBase*          AHIBase )
{
  struct AHI_AudioDatabase *audiodb;
  struct TagItem *dbtags,*tag1,*tag2,*tstate=tags;
  ULONG *ptr;
  ULONG stringlen;
  struct Library *AHIsubBase=NULL;
  struct AHIAudioCtrlDrv *audioctrl=NULL;
  BOOL rc=TRUE; // TRUE == _everything_ went well
  struct TagItem idtag[2] = { {AHIA_AudioID, 0} , {TAG_DONE, 0} };

  if(AHIBase->ahib_DebugLevel >= AHI_DEBUG_HIGH)
  {
    Debug_GetAudioAttrsA(id, actrl, tags);
  }

  if((audiodb=LockDatabase()))
  {
    if(id == AHI_INVALID_ID)
    {
      if(!(audioctrl= (struct AHIAudioCtrlDrv*) actrl))
        rc=FALSE;
      else
        idtag[0].ti_Data=((struct AHIPrivAudioCtrl *)actrl)->ahiac_AudioID;
    }
    else
    {
      idtag[0].ti_Data = (id == AHI_DEFAULT_ID ? AHIBase->ahib_AudioMode : id);
      audioctrl=(struct AHIAudioCtrlDrv *)CreateAudioCtrl(idtag);
    }

    if(audioctrl && rc )
    {
      if((dbtags=GetDBTagList(audiodb, idtag[0].ti_Data)))
      {
        stringlen=GetTagData(AHIDB_BufferLen,0,tags);
        if((AHIsubBase=OpenLibrary(((struct AHIPrivAudioCtrl *)audioctrl)->ahiac_DriverName,DriverVersion)))
        {
          while((tag1=NextTagItem(&tstate)))
          {
            ptr=(ULONG *)tag1->ti_Data;
            switch(tag1->ti_Tag)
            {
            case AHIDB_Driver:
            case AHIDB_Name:
              if((tag2=FindTagItem(tag1->ti_Tag,dbtags)))
                stccpy((char *)tag1->ti_Data,(char *)tag2->ti_Data,stringlen);
              break;
// Skip these!
            case AHIDB_FrequencyArg:
            case AHIDB_IndexArg:
            case AHIDB_InputArg:
            case AHIDB_OutputArg:
              break;
// Strings
            case AHIDB_Author:
            case AHIDB_Copyright:
            case AHIDB_Version:
            case AHIDB_Annotation:
              stccpy((char *)tag1->ti_Data,(char *)AHIsub_GetAttr(tag1->ti_Tag,0,(ULONG)"",dbtags,audioctrl),stringlen);
              break;
// Input & Output strings
            case AHIDB_Input:
              stccpy((char *)tag1->ti_Data,(char *)AHIsub_GetAttr(tag1->ti_Tag,
                  GetTagData(AHIDB_InputArg,0,tags),
                  (ULONG) GetahiString(msgDefault),dbtags,audioctrl),stringlen);
              break;
            case AHIDB_Output:
              stccpy((char *)tag1->ti_Data,(char *)AHIsub_GetAttr(tag1->ti_Tag,
                  GetTagData(AHIDB_OutputArg,0,tags),
                  (ULONG) GetahiString(msgDefault),dbtags,audioctrl),stringlen);
              break;
// Other
            case AHIDB_Bits:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,0,dbtags,audioctrl);
              break;
            case AHIDB_MaxChannels:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,128,dbtags,audioctrl);
              break;
            case AHIDB_MinMixFreq:
              *ptr=AHIsub_GetAttr(AHIDB_Frequency,0,0,dbtags,audioctrl);
              break;
            case AHIDB_MaxMixFreq:
              *ptr=AHIsub_GetAttr(AHIDB_Frequency,(AHIsub_GetAttr(AHIDB_Frequencies,1,0,dbtags,audioctrl)-1),0,dbtags,audioctrl);
              break;
            case AHIDB_Frequencies:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,1,dbtags,audioctrl);
              break;
            case AHIDB_Frequency:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,GetTagData(AHIDB_FrequencyArg,0,tags),0,dbtags,audioctrl);
              break;
            case AHIDB_Index:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,GetTagData(AHIDB_IndexArg,0,tags),0,dbtags,audioctrl);
              break;
            case AHIDB_MaxPlaySamples:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,audioctrl->ahiac_MaxBuffSamples,dbtags,audioctrl);
              break;
            case AHIDB_MaxRecordSamples:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,0,dbtags,audioctrl);
              break;
            case AHIDB_MinMonitorVolume:
            case AHIDB_MaxMonitorVolume:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,0x00000,dbtags,audioctrl);
              break;
            case AHIDB_MinInputGain:
            case AHIDB_MaxInputGain:
            case AHIDB_MinOutputVolume:
            case AHIDB_MaxOutputVolume:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,0x10000,dbtags,audioctrl);
              break;
            case AHIDB_Inputs:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,0,dbtags,audioctrl);
              break;
            case AHIDB_Outputs:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,1,dbtags,audioctrl);
              break;
// Booleans that defaults to FALSE
            case AHIDB_Realtime:
            case AHIDB_Record:
            case AHIDB_FullDuplex:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,FALSE,dbtags,audioctrl);
              break;
// Booleans that defaults to TRUE
            case AHIDB_PingPong:
              *ptr=AHIsub_GetAttr(tag1->ti_Tag,0,TRUE,dbtags,audioctrl);
              break;
// Tags from the database.
            default:
              if((tag2=FindTagItem(tag1->ti_Tag,dbtags)))
                *ptr=tag2->ti_Data;
              break;
            }
          }
        }
        else // no AHIsubBase
          rc=FALSE;
      }
      else // no database taglist
        rc=FALSE;
    }
    else // no valid audioctrl
       rc=FALSE;
    if(id != AHI_INVALID_ID)
      AHIFreeVec(audioctrl);
    if(AHIsubBase)
      CloseLibrary(AHIsubBase);
    UnlockDatabase(audiodb);
  }
  else // unable to lock database
    rc=FALSE;

  if(AHIBase->ahib_DebugLevel >= AHI_DEBUG_HIGH)
  {
    KPrintF("=>%s\n", rc ? "TRUE" : "FALSE" );
  }

  return (ULONG) rc;
}
Esempio n. 17
0
HRESULT
AsdkSheetSet::overrideDefaultDWTLayout(char* templPath,
									  IAcSmSubset *pSubSet)
{
	if(FAILED(isInitialized("overrideDefaultDWTLayout")))
		return E_FAIL;
	
	 // lock the the database first before doing any operation on it
    if (FAILED(LockDatabase()))
	{
		acutPrintf("\n Database lock failed!");
        return E_FAIL;
	}

	CComQIPtr<IAcSmSubset> pSub = pSubSet;
	if(!pSub.p)
		pSubSet = m_pSheetSet;

	// if a default layout exists, release it first
	if(pDefDwtLayoutRef.p)
		pDefDwtLayoutRef.Release();

	// create the NamedAcDbObjectReference.
	if(FAILED(pDefDwtLayoutRef.CoCreateInstance(L"AcSmComponents.AcSmAcDbLayoutReference")))
	{ 
		acutPrintf("\n Cannot create named object reference");
		return E_FAIL;
	}

	if(FAILED(pDefDwtLayoutRef->InitNew(pSubSet)))
	{
		acutPrintf("\n Cannot initialize layout");
		return E_FAIL;
	}

	// Set template path
	CComBSTR bstrDwtPath(templPath); // layout drawing name
		
	// Set layout drawing name
	if(FAILED(pDefDwtLayoutRef->SetFileName(bstrDwtPath)))
	{
		acutPrintf("\n Cannot set template path");
		return E_FAIL;
	}

	// Override default drawing template at the subset level
	if(FAILED(pSubSet->SetDefDwtLayout(pDefDwtLayoutRef)))
	{
		acutPrintf("\n Cannot override template path");
		return E_FAIL;
	}

	// Unlock database
	if (FAILED(UnlockDatabase())) 
	{
		acutPrintf("\n Cannot unlock database");
        return E_FAIL;
	}

	return S_OK;
}