Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

901 lines
19 KiB

  1. //////////////////////////////////////////////////////////////////////
  2. // PromptEntry.cpp: implementation of the CPromptEntry class.
  3. //
  4. // Created by JOEM 04-2000
  5. // Copyright (C) 2000 Microsoft Corporation
  6. // All Rights Reserved
  7. //
  8. /////////////////////////////////////////////////////// JOEM 4-2000 //
  9. #include "stdafx.h"
  10. #include "PromptEntry.h"
  11. #include "common.h"
  12. #include "vapiIO.h"
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. /////////////////////////////////////////////////////// JOEM 4-2000 //
  16. CPromptEntry::CPromptEntry()
  17. {
  18. m_pszId = NULL;
  19. m_pszText = NULL;
  20. m_pszOriginalText = NULL;
  21. m_pszFileName = NULL;
  22. m_pszStartPhone = NULL;
  23. m_pszEndPhone = NULL;
  24. m_pszRightContext = NULL;
  25. m_pszLeftContext = NULL;
  26. m_dFrom = 0;
  27. m_dTo = 0;
  28. m_vcRef = 1;
  29. }
  30. // Copy constructor
  31. CPromptEntry::CPromptEntry(const CPromptEntry & old)
  32. {
  33. USHORT i = 0;
  34. if ( old.m_pszId )
  35. {
  36. m_pszId = wcsdup( old.m_pszId );
  37. }
  38. else
  39. {
  40. m_pszId = NULL;
  41. }
  42. if ( old.m_pszText )
  43. {
  44. m_pszText = wcsdup( old.m_pszText );
  45. }
  46. else
  47. {
  48. m_pszText = NULL;
  49. }
  50. if ( old.m_pszOriginalText )
  51. {
  52. m_pszOriginalText = wcsdup( old.m_pszOriginalText );
  53. }
  54. else
  55. {
  56. m_pszOriginalText = NULL;
  57. }
  58. if ( old.m_pszFileName )
  59. {
  60. m_pszFileName = wcsdup( old.m_pszFileName );
  61. }
  62. else
  63. {
  64. m_pszFileName = NULL;
  65. }
  66. if ( old.m_pszStartPhone )
  67. {
  68. m_pszStartPhone = wcsdup( old.m_pszStartPhone );
  69. }
  70. else
  71. {
  72. m_pszStartPhone = NULL;
  73. }
  74. if ( old.m_pszEndPhone )
  75. {
  76. m_pszEndPhone = wcsdup( old.m_pszEndPhone );
  77. }
  78. else
  79. {
  80. m_pszEndPhone = NULL;
  81. }
  82. if ( old.m_pszRightContext )
  83. {
  84. m_pszRightContext = wcsdup( old.m_pszRightContext );
  85. }
  86. else
  87. {
  88. m_pszRightContext = NULL;
  89. }
  90. if ( old.m_pszLeftContext )
  91. {
  92. m_pszLeftContext = wcsdup( old.m_pszLeftContext );
  93. }
  94. else
  95. {
  96. m_pszLeftContext = NULL;
  97. }
  98. m_dFrom = old.m_dFrom;
  99. m_dTo = old.m_dTo;
  100. for ( i=0; i<old.m_aTags.GetSize(); i++ )
  101. {
  102. m_aTags.Add( old.m_aTags[i] );
  103. }
  104. m_vcRef = 1;
  105. }
  106. // Destructor
  107. CPromptEntry::~CPromptEntry()
  108. {
  109. int i = 0;
  110. if (m_pszId)
  111. {
  112. free(m_pszId);
  113. m_pszId = NULL;
  114. }
  115. if (m_pszText)
  116. {
  117. free(m_pszText);
  118. m_pszText = NULL;
  119. }
  120. if (m_pszOriginalText)
  121. {
  122. free(m_pszOriginalText);
  123. m_pszOriginalText = NULL;
  124. }
  125. if (m_pszFileName)
  126. {
  127. free(m_pszFileName);
  128. m_pszFileName = NULL;
  129. }
  130. if (m_pszStartPhone)
  131. {
  132. free(m_pszStartPhone);
  133. m_pszStartPhone = NULL;
  134. }
  135. if (m_pszEndPhone)
  136. {
  137. free(m_pszEndPhone);
  138. m_pszEndPhone = NULL;
  139. }
  140. if (m_pszRightContext)
  141. {
  142. free(m_pszRightContext);
  143. m_pszRightContext = NULL;
  144. }
  145. if (m_pszLeftContext)
  146. {
  147. free(m_pszLeftContext);
  148. m_pszLeftContext = NULL;
  149. }
  150. for ( i=0; i<m_aTags.GetSize(); i++ )
  151. {
  152. m_aTags[i].dstr.Clear();
  153. }
  154. m_aTags.RemoveAll();
  155. }
  156. //
  157. // IUnknown implementations
  158. //
  159. //////////////////////////////////////////////////////////////////////
  160. // CPromptEntry::QueryInterface
  161. //
  162. /////////////////////////////////////////////////////// JOEM 5-2000 //
  163. STDMETHODIMP CPromptEntry::QueryInterface(const IID& iid, void** ppv)
  164. {
  165. if ( iid == IID_IUnknown )
  166. {
  167. *ppv = dynamic_cast<IPromptEntry*> (this);
  168. }
  169. else if ( iid == IID_IPromptEntry )
  170. {
  171. *ppv = dynamic_cast<IPromptEntry*> (this);
  172. }
  173. else
  174. {
  175. *ppv = NULL;
  176. return E_NOINTERFACE;
  177. }
  178. ((IUnknown*) *ppv)->AddRef();
  179. return S_OK;
  180. }
  181. //////////////////////////////////////////////////////////////////////
  182. // CPromptEntry::AddRef
  183. //
  184. /////////////////////////////////////////////////////// JOEM 5-2000 //
  185. ULONG CPromptEntry::AddRef()
  186. {
  187. return InterlockedIncrement(&m_vcRef);
  188. }
  189. //////////////////////////////////////////////////////////////////////
  190. // CPromptEntry::Release
  191. //
  192. /////////////////////////////////////////////////////// JOEM 5-2000 //
  193. ULONG CPromptEntry::Release()
  194. {
  195. if ( 0 == InterlockedDecrement(&m_vcRef) )
  196. {
  197. delete this;
  198. return 0;
  199. }
  200. return (ULONG) m_vcRef;
  201. }
  202. //
  203. // IPromptEntry implementations
  204. //
  205. // All of the following should be reasonably self-explanatory functions
  206. // for reading/writing entry data.
  207. //
  208. //////////////////////////////////////////////////////////////////////
  209. // CPromptEntry
  210. //
  211. // SetId
  212. //
  213. /////////////////////////////////////////////////////// JOEM 3-2000 //
  214. STDMETHODIMP CPromptEntry::SetId(const WCHAR *pszId)
  215. {
  216. SPDBG_FUNC( "CPromptEntry::SetId" );
  217. HRESULT hr = S_OK;
  218. SPDBG_ASSERT(pszId);
  219. if ( m_pszId )
  220. {
  221. free ( m_pszId );
  222. m_pszId = NULL;
  223. }
  224. m_pszId = wcsdup(pszId);
  225. if ( !m_pszId )
  226. {
  227. hr = E_OUTOFMEMORY;
  228. }
  229. if ( SUCCEEDED(hr) )
  230. {
  231. hr = RegularizeText(m_pszId, KEEP_PUNCTUATION);
  232. }
  233. SPDBG_REPORT_ON_FAIL( hr );
  234. return hr;
  235. }
  236. //////////////////////////////////////////////////////////////////////
  237. // CPromptEntry
  238. //
  239. // GetId
  240. //
  241. /////////////////////////////////////////////////////// JOEM 3-2000 //
  242. STDMETHODIMP CPromptEntry::GetId(const WCHAR **ppszId)
  243. {
  244. SPDBG_FUNC( "CPromptEntry::GetId" );
  245. HRESULT hr = S_OK;
  246. *ppszId = m_pszId;
  247. SPDBG_REPORT_ON_FAIL( hr );
  248. return hr;
  249. }
  250. //////////////////////////////////////////////////////////////////////
  251. // CPromptEntry
  252. //
  253. // SetText
  254. //
  255. /////////////////////////////////////////////////////// JOEM 3-2000 //
  256. STDMETHODIMP CPromptEntry::SetText(const WCHAR *pszText)
  257. {
  258. SPDBG_FUNC( "CPromptEntry::SetText" );
  259. HRESULT hr = S_OK;
  260. SPDBG_ASSERT(pszText);
  261. if ( m_pszText )
  262. {
  263. free ( m_pszText );
  264. m_pszText = NULL;
  265. }
  266. m_pszText = wcsdup(pszText);
  267. if ( !m_pszText )
  268. {
  269. hr = E_OUTOFMEMORY;
  270. }
  271. if ( SUCCEEDED(hr) )
  272. {
  273. hr = RegularizeText(m_pszText, REMOVE_PUNCTUATION);
  274. }
  275. SPDBG_REPORT_ON_FAIL( hr );
  276. return hr;
  277. }
  278. //////////////////////////////////////////////////////////////////////
  279. // CPromptEntry
  280. //
  281. // GetText
  282. //
  283. /////////////////////////////////////////////////////// JOEM 3-2000 //
  284. STDMETHODIMP CPromptEntry::GetText(const WCHAR** ppszText)
  285. {
  286. SPDBG_FUNC( "CPromptEntry::GetText" );
  287. HRESULT hr = S_OK;
  288. *ppszText = m_pszText;
  289. SPDBG_REPORT_ON_FAIL( hr );
  290. return hr;
  291. }
  292. //////////////////////////////////////////////////////////////////////
  293. // CPromptEntry
  294. //
  295. // SetOriginalText
  296. //
  297. /////////////////////////////////////////////////////// JOEM 3-2000 //
  298. STDMETHODIMP CPromptEntry::SetOriginalText(const WCHAR *pszText)
  299. {
  300. SPDBG_FUNC( "CPromptEntry::SetOriginalText" );
  301. HRESULT hr = S_OK;
  302. SPDBG_ASSERT(pszText);
  303. if ( m_pszOriginalText )
  304. {
  305. free ( m_pszOriginalText );
  306. m_pszOriginalText = NULL;
  307. }
  308. m_pszOriginalText = wcsdup(pszText);
  309. if ( !m_pszOriginalText )
  310. {
  311. hr = E_OUTOFMEMORY;
  312. }
  313. SPDBG_REPORT_ON_FAIL( hr );
  314. return hr;
  315. }
  316. //////////////////////////////////////////////////////////////////////
  317. // CPromptEntry
  318. //
  319. // GetOriginalText
  320. //
  321. /////////////////////////////////////////////////////// JOEM 3-2000 //
  322. STDMETHODIMP CPromptEntry::GetOriginalText(const WCHAR** ppszText)
  323. {
  324. SPDBG_FUNC( "CPromptEntry::GetOriginalText" );
  325. HRESULT hr = S_OK;
  326. *ppszText = m_pszOriginalText;
  327. SPDBG_REPORT_ON_FAIL( hr );
  328. return hr;
  329. }
  330. //////////////////////////////////////////////////////////////////////
  331. // CPromptEntry
  332. //
  333. // SetFileName
  334. //
  335. /////////////////////////////////////////////////////// JOEM 3-2000 //
  336. STDMETHODIMP CPromptEntry::SetFileName(const WCHAR *pszFileName)
  337. {
  338. SPDBG_FUNC( "CPromptEntry::SetFileName" );
  339. HRESULT hr = S_OK;
  340. SPDBG_ASSERT(pszFileName);
  341. if ( m_pszFileName )
  342. {
  343. free ( m_pszFileName );
  344. m_pszFileName = NULL;
  345. }
  346. m_pszFileName = wcsdup(pszFileName);
  347. if ( !m_pszFileName )
  348. {
  349. hr = E_OUTOFMEMORY;
  350. }
  351. SPDBG_REPORT_ON_FAIL( hr );
  352. return hr;
  353. }
  354. //////////////////////////////////////////////////////////////////////
  355. // CPromptEntry
  356. //
  357. // GetFileName
  358. //
  359. /////////////////////////////////////////////////////// JOEM 3-2000 //
  360. STDMETHODIMP CPromptEntry::GetFileName(const WCHAR** ppszFileName)
  361. {
  362. SPDBG_FUNC( "CPromptEntry::GetFileName" );
  363. HRESULT hr = S_OK;
  364. *ppszFileName = m_pszFileName;
  365. SPDBG_REPORT_ON_FAIL( hr );
  366. return hr;
  367. }
  368. //////////////////////////////////////////////////////////////////////
  369. // CPromptEntry
  370. //
  371. // SetStartPhone
  372. //
  373. /////////////////////////////////////////////////////// JOEM 6-2000 //
  374. STDMETHODIMP CPromptEntry::SetStartPhone(const WCHAR *pszStartPhone)
  375. {
  376. SPDBG_FUNC( "CPromptEntry::SetStartPhone" );
  377. HRESULT hr = S_OK;
  378. SPDBG_ASSERT(pszStartPhone);
  379. if ( m_pszStartPhone )
  380. {
  381. free ( m_pszStartPhone );
  382. pszStartPhone = NULL;
  383. }
  384. m_pszStartPhone = wcsdup(pszStartPhone);
  385. if ( !m_pszStartPhone )
  386. {
  387. hr = E_OUTOFMEMORY;
  388. }
  389. if ( SUCCEEDED(hr) )
  390. {
  391. hr = RegularizeText(m_pszStartPhone, KEEP_PUNCTUATION);
  392. }
  393. SPDBG_REPORT_ON_FAIL( hr );
  394. return hr;
  395. }
  396. //////////////////////////////////////////////////////////////////////
  397. // CPromptEntry
  398. //
  399. // GetStartPhone
  400. //
  401. /////////////////////////////////////////////////////// JOEM 6-2000 //
  402. STDMETHODIMP CPromptEntry::GetStartPhone(const WCHAR** ppszStartPhone)
  403. {
  404. SPDBG_FUNC( "CPromptEntry::GetStartPhone" );
  405. HRESULT hr = S_OK;
  406. *ppszStartPhone = m_pszStartPhone;
  407. SPDBG_REPORT_ON_FAIL( hr );
  408. return hr;
  409. }
  410. //////////////////////////////////////////////////////////////////////
  411. // CPromptEntry
  412. //
  413. // SetEndPhone
  414. //
  415. /////////////////////////////////////////////////////// JOEM 6-2000 //
  416. STDMETHODIMP CPromptEntry::SetEndPhone(const WCHAR *pszEndPhone)
  417. {
  418. SPDBG_FUNC( "CPromptEntry::SetEndPhone" );
  419. HRESULT hr = S_OK;
  420. SPDBG_ASSERT(pszEndPhone);
  421. if ( m_pszEndPhone )
  422. {
  423. free ( m_pszEndPhone );
  424. pszEndPhone = NULL;
  425. }
  426. m_pszEndPhone = wcsdup(pszEndPhone);
  427. if ( !m_pszEndPhone )
  428. {
  429. hr = E_OUTOFMEMORY;
  430. }
  431. if ( SUCCEEDED(hr) )
  432. {
  433. hr = RegularizeText(m_pszEndPhone, KEEP_PUNCTUATION);
  434. }
  435. SPDBG_REPORT_ON_FAIL( hr );
  436. return hr;
  437. }
  438. //////////////////////////////////////////////////////////////////////
  439. // CPromptEntry
  440. //
  441. // GetEndPhone
  442. //
  443. /////////////////////////////////////////////////////// JOEM 6-2000 //
  444. STDMETHODIMP CPromptEntry::GetEndPhone(const WCHAR** ppszEndPhone)
  445. {
  446. SPDBG_FUNC( "CPromptEntry::GetEndPhone" );
  447. HRESULT hr = S_OK;
  448. *ppszEndPhone = m_pszEndPhone;
  449. SPDBG_REPORT_ON_FAIL( hr );
  450. return hr;
  451. }
  452. //////////////////////////////////////////////////////////////////////
  453. // CPromptEntry
  454. //
  455. // SetLeftContext
  456. //
  457. /////////////////////////////////////////////////////// JOEM 6-2000 //
  458. STDMETHODIMP CPromptEntry::SetLeftContext(const WCHAR *pszLeftContext)
  459. {
  460. SPDBG_FUNC( "CPromptEntry::SetLeftContext" );
  461. HRESULT hr = S_OK;
  462. SPDBG_ASSERT(pszLeftContext);
  463. if ( m_pszLeftContext )
  464. {
  465. free ( m_pszLeftContext );
  466. pszLeftContext = NULL;
  467. }
  468. m_pszLeftContext = wcsdup(pszLeftContext);
  469. if ( !m_pszLeftContext )
  470. {
  471. hr = E_OUTOFMEMORY;
  472. }
  473. if ( SUCCEEDED(hr) )
  474. {
  475. hr = RegularizeText(m_pszLeftContext, KEEP_PUNCTUATION);
  476. }
  477. SPDBG_REPORT_ON_FAIL( hr );
  478. return hr;
  479. }
  480. //////////////////////////////////////////////////////////////////////
  481. // CPromptEntry
  482. //
  483. // GetLeftContext
  484. //
  485. /////////////////////////////////////////////////////// JOEM 6-2000 //
  486. STDMETHODIMP CPromptEntry::GetLeftContext(const WCHAR** ppszLeftContext)
  487. {
  488. SPDBG_FUNC( "CPromptEntry::GetLeftContext" );
  489. HRESULT hr = S_OK;
  490. *ppszLeftContext = m_pszLeftContext;
  491. SPDBG_REPORT_ON_FAIL( hr );
  492. return hr;
  493. }
  494. //////////////////////////////////////////////////////////////////////
  495. // CPromptEntry
  496. //
  497. // SetRightContext
  498. //
  499. /////////////////////////////////////////////////////// JOEM 6-2000 //
  500. STDMETHODIMP CPromptEntry::SetRightContext(const WCHAR *pszRightContext)
  501. {
  502. SPDBG_FUNC( "CPromptEntry::SetRightContext" );
  503. HRESULT hr = S_OK;
  504. SPDBG_ASSERT(pszRightContext);
  505. if ( m_pszRightContext )
  506. {
  507. free ( m_pszRightContext );
  508. pszRightContext = NULL;
  509. }
  510. m_pszRightContext = wcsdup(pszRightContext);
  511. if ( !m_pszRightContext )
  512. {
  513. hr = E_OUTOFMEMORY;
  514. }
  515. if ( SUCCEEDED(hr) )
  516. {
  517. hr = RegularizeText(m_pszRightContext, KEEP_PUNCTUATION);
  518. }
  519. SPDBG_REPORT_ON_FAIL( hr );
  520. return hr;
  521. }
  522. //////////////////////////////////////////////////////////////////////
  523. // CPromptEntry
  524. //
  525. // GetRightContext
  526. //
  527. /////////////////////////////////////////////////////// JOEM 6-2000 //
  528. STDMETHODIMP CPromptEntry::GetRightContext(const WCHAR** ppszRightContext)
  529. {
  530. SPDBG_FUNC( "CPromptEntry::GetRightContext" );
  531. HRESULT hr = S_OK;
  532. *ppszRightContext = m_pszRightContext;
  533. SPDBG_REPORT_ON_FAIL( hr );
  534. return hr;
  535. }
  536. //////////////////////////////////////////////////////////////////////
  537. // CPromptEntry
  538. //
  539. // SetStart
  540. //
  541. /////////////////////////////////////////////////////// JOEM 3-2000 //
  542. STDMETHODIMP CPromptEntry::SetStart(const double dFrom)
  543. {
  544. SPDBG_FUNC( "CPromptEntry::SetStart" );
  545. if ( dFrom < 0.0 )
  546. {
  547. return E_INVALIDARG;
  548. }
  549. m_dFrom = dFrom;
  550. return S_OK;
  551. }
  552. //////////////////////////////////////////////////////////////////////
  553. // CPromptEntry
  554. //
  555. // GetStart
  556. //
  557. /////////////////////////////////////////////////////// JOEM 3-2000 //
  558. STDMETHODIMP CPromptEntry::GetStart(double *dFrom)
  559. {
  560. SPDBG_FUNC( "CPromptEntry::GetStart" );
  561. *dFrom = m_dFrom;
  562. return S_OK;
  563. }
  564. //////////////////////////////////////////////////////////////////////
  565. // CPromptEntry
  566. //
  567. // SetEnd
  568. //
  569. /////////////////////////////////////////////////////// JOEM 3-2000 //
  570. STDMETHODIMP CPromptEntry::SetEnd(const double dTo)
  571. {
  572. SPDBG_FUNC( "CPromptEntry::SetEnd" );
  573. if ( dTo <= 0.0 )
  574. {
  575. if ( dTo != -1.0 )
  576. {
  577. return E_INVALIDARG;
  578. }
  579. }
  580. m_dTo = dTo;
  581. return S_OK;
  582. }
  583. //////////////////////////////////////////////////////////////////////
  584. // CPromptEntry
  585. //
  586. // GetEnd
  587. //
  588. /////////////////////////////////////////////////////// JOEM 3-2000 //
  589. STDMETHODIMP CPromptEntry::GetEnd(double *dTo)
  590. {
  591. SPDBG_FUNC( "CPromptEntry::GetEnd" );
  592. *dTo = m_dTo;
  593. return S_OK;
  594. }
  595. //////////////////////////////////////////////////////////////////////
  596. // CPromptEntry
  597. //
  598. // AddTag
  599. //
  600. /////////////////////////////////////////////////////// JOEM 3-2000 //
  601. STDMETHODIMP CPromptEntry::AddTag(const WCHAR *pszTag)
  602. {
  603. SPDBG_FUNC( "CPromptEntry::AddTag" );
  604. HRESULT hr = S_OK;
  605. WCHAR* pszCapTag = NULL;
  606. SPDBG_ASSERT(pszTag);
  607. pszCapTag = wcsdup(pszTag);
  608. if ( !pszCapTag )
  609. {
  610. hr = E_OUTOFMEMORY;
  611. }
  612. if ( SUCCEEDED(hr) )
  613. {
  614. WStringUpperCase(pszCapTag);
  615. m_aTags.Add(pszCapTag);
  616. free(pszCapTag);
  617. pszCapTag = NULL;
  618. }
  619. return S_OK;
  620. }
  621. //////////////////////////////////////////////////////////////////////
  622. // CPromptEntry
  623. //
  624. // RemoveTag
  625. //
  626. /////////////////////////////////////////////////////// JOEM 3-2000 //
  627. STDMETHODIMP CPromptEntry::RemoveTag(const USHORT unId)
  628. {
  629. SPDBG_FUNC( "CPromptEntry::RemoveTag" );
  630. HRESULT hr = S_OK;
  631. SPDBG_ASSERT(unId);
  632. if ( unId >= m_aTags.GetSize() )
  633. {
  634. hr = E_INVALIDARG;
  635. }
  636. if ( SUCCEEDED(hr) )
  637. {
  638. m_aTags[unId].dstr.Clear();
  639. m_aTags.RemoveAt( unId );
  640. }
  641. SPDBG_REPORT_ON_FAIL( hr );
  642. return hr;
  643. }
  644. //////////////////////////////////////////////////////////////////////
  645. // CPromptEntry
  646. //
  647. // GetTag
  648. //
  649. /////////////////////////////////////////////////////// JOEM 3-2000 //
  650. STDMETHODIMP CPromptEntry::GetTag(const WCHAR **ppszTag, const USHORT unId)
  651. {
  652. SPDBG_FUNC( "CPromptEntry::GetTag" );
  653. HRESULT hr = S_OK;
  654. if ( unId >= m_aTags.GetSize() )
  655. {
  656. hr = E_INVALIDARG;
  657. }
  658. if ( SUCCEEDED(hr) )
  659. {
  660. *ppszTag = m_aTags[unId].dstr;
  661. }
  662. SPDBG_REPORT_ON_FAIL( hr );
  663. return hr;
  664. }
  665. //////////////////////////////////////////////////////////////////////
  666. // CPromptEntry
  667. //
  668. // CountTags
  669. //
  670. /////////////////////////////////////////////////////// JOEM 3-2000 //
  671. STDMETHODIMP CPromptEntry::CountTags(USHORT *unTagCount)
  672. {
  673. SPDBG_FUNC( "CPromptEntry::CountTags" );
  674. *unTagCount = (USHORT) m_aTags.GetSize();
  675. return S_OK;
  676. }
  677. //////////////////////////////////////////////////////////////////////
  678. // CPromptEntry
  679. //
  680. // GetSamples
  681. //
  682. /////////////////////////////////////////////////////// JOEM 6-2000 //
  683. STDMETHODIMP CPromptEntry::GetSamples(SHORT** ppnSamples, int* iNumSamples, WAVEFORMATEX* pFormat)
  684. {
  685. SPDBG_FUNC( "CPromptEntry::GetSamples" );
  686. HRESULT hr = S_OK;
  687. VapiIO* pVapiIO = NULL;
  688. SPDBG_ASSERT(ppnSamples);
  689. SPDBG_ASSERT(iNumSamples);
  690. SPDBG_ASSERT(pFormat);
  691. if ( SUCCEEDED( hr ) )
  692. {
  693. pVapiIO = VapiIO::ClassFactory();
  694. if ( !pVapiIO )
  695. {
  696. hr = E_OUTOFMEMORY;
  697. }
  698. }
  699. if ( SUCCEEDED(hr) )
  700. {
  701. if ( pVapiIO->OpenFile(m_pszFileName, VAPI_IO_READ) != 0 )
  702. {
  703. hr = E_ACCESSDENIED;
  704. }
  705. if ( SUCCEEDED(hr) )
  706. {
  707. if ( pVapiIO->Format(NULL, NULL, pFormat) != 0 )
  708. {
  709. hr = E_FAIL;
  710. }
  711. if ( SUCCEEDED(hr) )
  712. {
  713. if ( pVapiIO->ReadSamples(m_dFrom, m_dTo, (void**) ppnSamples, iNumSamples, 1) != 0 )
  714. {
  715. hr = E_FAIL;
  716. }
  717. }
  718. pVapiIO->CloseFile();
  719. }
  720. delete pVapiIO;
  721. pVapiIO = NULL;
  722. }
  723. SPDBG_REPORT_ON_FAIL( hr );
  724. return hr;
  725. }
  726. //////////////////////////////////////////////////////////////////////
  727. // CPromptEntry
  728. //
  729. // GetFormat
  730. //
  731. /////////////////////////////////////////////////////// JOEM 6-2000 //
  732. STDMETHODIMP CPromptEntry::GetFormat(WAVEFORMATEX** ppFormat)
  733. {
  734. SPDBG_FUNC( "CPromptEntry::GetSamples" );
  735. HRESULT hr = S_OK;
  736. VapiIO* pVapiIO = NULL;
  737. SPDBG_ASSERT(ppFormat);
  738. if ( SUCCEEDED( hr ) )
  739. {
  740. pVapiIO = VapiIO::ClassFactory();
  741. if ( !pVapiIO )
  742. {
  743. hr = E_OUTOFMEMORY;
  744. }
  745. }
  746. if ( SUCCEEDED(hr) )
  747. {
  748. if ( pVapiIO->OpenFile(m_pszFileName, VAPI_IO_READ) != 0 )
  749. {
  750. hr = E_ACCESSDENIED;
  751. }
  752. if ( SUCCEEDED(hr) )
  753. {
  754. if ( pVapiIO->Format(NULL, NULL, *ppFormat) != 0 )
  755. {
  756. hr = E_FAIL;
  757. }
  758. pVapiIO->CloseFile();
  759. }
  760. delete pVapiIO;
  761. pVapiIO = NULL;
  762. }
  763. SPDBG_REPORT_ON_FAIL( hr );
  764. return hr;
  765. }