testxres.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:20k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: testxres.cpp,v 1.4.32.1 2004/07/09 02:09:16 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _UNIX
  50. #include <windows.h>
  51. #endif
  52. #include "hxtypes.h"
  53. #include "hxresult.h"
  54. #include "pnpeff.h"
  55. #include "dllacces.h"
  56. #include "dllpath.h"
  57. #include "hxslist.h"
  58. #include "pnxres.h"
  59. #include "pnxbmp.h"
  60. #include "hlxclib/stdlib.h"
  61. #include "hlxclib/string.h"
  62. #include "hlxclib/stdio.h"
  63. #include "chxdataf.h"
  64. #include "hxassert.h"
  65. #include "pnxdlog.h"
  66. #include "pnxmenu.h"
  67. #include "pnxmbar.h"
  68. #include "pnxcrsr.h"
  69. #include "pnxicon.h"
  70. ENABLE_DLLACCESS_PATHS(Testxres);
  71. #ifdef _MACINTOSH
  72. #include <console.h>
  73. #include "macfd.h"
  74. #include "resource.h"
  75. void    AddSubMenu(MenuHandle   menu, CHXXMenu* pMenu,UINT16*  index);
  76. #endif
  77. #ifdef _UNIX
  78. #include <fcntl.h> // for O_CREAT, O_WRONLY, etc.
  79. #include <Xm/PushB.h>
  80. #include "xpm.h"
  81. //#include <X11/xpm.h>
  82. #endif
  83. ULONG32         gSubMenuID=2;
  84. ULONG32         gSubLevel=1;
  85. typedef HX_RESULT (HXEXPORT_PTR FPCREATEINSTANCE) (IUnknown** /*OUT*/ ppIUnknown);
  86. BOOL OpenLibPNCreateInstance(char* dllName, UINT32 uDLLNameLen, const char* szShortName,const char* szLongName,DLLAccess& lib,IUnknown** pObj)
  87. {
  88.     
  89.     DLLAccess::CreateName(szShortName,szLongName, dllName, uDLLNameLen);
  90.     if (DLLAccess::DLL_OK != lib.open(dllName))
  91. return(FALSE);
  92.     FPCREATEINSTANCE fpCreateInstance = (FPCREATEINSTANCE)lib.getSymbol("HXCreateInstance");
  93.     fpCreateInstance(pObj);
  94.     HX_ASSERT(*pObj);
  95.     if (!*pObj)
  96. return FALSE;
  97.     return TRUE;
  98. }
  99. extern "C" int main (int argc,char** argv)
  100. {
  101.   IHXXResource*  rsrc;
  102. #ifdef _MACINTOSH
  103. InitGraf(&qd.thePort);
  104. InitFonts();
  105. FlushEvents(everyEvent, 0);
  106. InitWindows();
  107. InitMenus();
  108. TEInit();
  109. InitDialogs(nil);
  110. InitCursor();
  111. DrawMenuBar();  
  112. argc = ccommand(&argv);
  113. #endif
  114. DLLAccess           PNXResLib;
  115. //
  116. //      SIMPLE TEST
  117. //
  118. IHXXResFile*           theFile=NULL;
  119. UINT16          ID;
  120.     // used for DLL name creation
  121.     const UINT32 MAX_DLL_NAME_LEN = 256;
  122.     char dllName[MAX_DLL_NAME_LEN]; /* Flawfinder: ignore */
  123.     UINT32 uDLLNameLen = MAX_DLL_NAME_LEN;
  124. if (!OpenLibPNCreateInstance(dllName,uDLLNameLen,"pnxr","pnxres",PNXResLib,(IUnknown**)&theFile))
  125. {
  126. printf("ERROR: Could not find %sn",dllName);
  127. return 0;
  128. }
  129. if (strcmp(argv[1],"CACHETEST")==0)
  130. {
  131. if (HXR_OK != theFile->Open(argv[2]))
  132. {
  133. printf("ERROR: file could not be opened.n");
  134. }
  135. for (int x=101; x<=115; x++)
  136. {
  137. if (HXR_OK==theFile->GetResource(HX_RT_BITMAP,x,&rsrc))
  138. {
  139. rsrc->Release();
  140. }
  141. }
  142. theFile->Close();
  143. return 0;
  144. }
  145. if (strcmp(argv[1],"DIALOG")==0)
  146. {
  147. if (HXR_OK != theFile->Open(argv[2]))
  148. {
  149. printf("ERROR: File could not be openend.n");
  150. }
  151. ULONG32 id=atoi(argv[3]);
  152. IHXXResource*  rsrc;
  153. if (HXR_OK == theFile->GetResource(HX_RT_DIALOG,id,&rsrc))
  154. {
  155. CHXXDialog*     theDialog=CHXXDialog::create(rsrc);
  156. rsrc->Release();
  157. //
  158. //      Draw out the things in the dialog, into a Window so that we can see how
  159. //      it is layed out.
  160. //
  161. #ifdef _MACINTOSH
  162. HX_DialogBoxHeader*       dlgh;
  163. HX_ControlData*           c=NULL;
  164. short                             index=0;
  165. GrafPtr         saveport; GetPort(&saveport);
  166. HX_RESULT       GetDialogHeader(HX_DialogBoxHeader**            h);
  167. theDialog->GetDialogHeader(&dlgh);
  168. Rect            wRect={50,50,dlgh->cy+50,dlgh->cx+50};
  169. WindowPtr       myWind=NewWindow(NULL,&wRect,"pStringParsing",TRUE,2,(WindowPtr)-1L, FALSE,NULL); 
  170. ShowWindow(myWind);
  171. SetPort(myWind);
  172. //
  173. //      Draw my dialog's items
  174. //
  175. while (HXR_OK==theDialog->GetNthControl(&c,index))
  176. {
  177. Rect  iRect={c->y,c->x,c->cy+c->y,c->cx+c->x};
  178. FrameRect(&iRect);
  179. index++;
  180. }
  181. while (!Button())
  182. {
  183. EventRecord     theEvent;
  184. WaitNextEvent(everyEvent,&theEvent,0xFF,NULL);
  185. }
  186. DisposeWindow(myWind);
  187. SetPort(saveport);
  188. #endif  
  189. }
  190. else
  191. {
  192. printf("ERROR: Dialog resource %d not found.",id);
  193. }
  194. return 0;
  195. }
  196. //
  197. //      Test the ability to display a bitmap.
  198. //
  199. if (strcmp(argv[1],"BITMAP")==0)
  200. {
  201. if (HXR_OK != theFile->Open(argv[2]))
  202. {
  203. printf("ERROR: File could not be openend.n");
  204. }
  205. ULONG32 id=atoi(argv[3]);
  206. IHXXResource*  rsrc=NULL;
  207. if (HXR_OK == theFile->GetResource(HX_RT_BITMAP,id,&rsrc))
  208. {
  209. #ifdef _MACINTOSH
  210. short                             index=0;
  211. GrafPtr         saveport; GetPort(&saveport);
  212. Rect            wRect={50,50,600,800};
  213. WindowPtr       myWind=NewWindow(NULL,&wRect,"pStringParsing",TRUE,2,(WindowPtr)-1L, FALSE,NULL); 
  214. ShowWindow(myWind);
  215. SetPort(myWind);
  216. //
  217. //      Okay make a CHXXBmp object, and feed the resource data we got into it.
  218. //              
  219. CHXXBitmap*        bmp;
  220. bmp=CHXXBitmap::create(rsrc);
  221. rsrc->Release();
  222. if (bmp)
  223. {
  224. Rect*   rect=*bmp;
  225. PixMapHandle thePixMap = GetGWorldPixMap( ( GWorldPtr ) *bmp );
  226. CopyBits((const BitMap*)*thePixMap,(const BitMap*)&myWind->portBits,*bmp,*bmp,srcCopy,NULL);
  227. ValidRect((Rect*)bmp);
  228. }
  229. while (!Button())
  230. {
  231. EventRecord     theEvent;
  232. WaitNextEvent(everyEvent,&theEvent,0xFF,NULL);
  233. }
  234. DisposeWindow(myWind);
  235. SetPort(saveport);
  236. bmp->Release();
  237. #endif  
  238. #ifdef _UNIX
  239. //
  240. //      Generate an XPM file.
  241. //                      
  242. CHXXBitmap* bmp;
  243. bmp=CHXXBitmap::create(rsrc);
  244. rsrc->Release();
  245. CHXDataFile*    outputfile;
  246. outputfile=CHXDataFile::Construct();
  247. if (outputfile)
  248. {               
  249. printf ("Width=%d Height=%dnconverteddata=0x%x converteddatasize=%dncommondata=0x%x commondatasize=%dn",
  250. bmp->m_Width,
  251. bmp->m_Height,
  252. bmp->m_ConvertedData,
  253. bmp->m_ConvertedDataSize,
  254. bmp->m_CommonData,
  255. bmp->m_CommonDataSize);
  256. outputfile->Open(argv[4],O_RDWR|O_CREAT);
  257. //outputfile->Write((char*)*bmp,strlen(*bmp));
  258. outputfile->Write((char*)(bmp->m_ConvertedData),bmp->m_ConvertedDataSize);
  259. outputfile->Close();
  260. delete outputfile;
  261. }
  262. else
  263. {
  264. printf("Could not create file object.r");
  265. }
  266. #if 1
  267. XtAppContext app;
  268. Widget top, button;
  269. int status;
  270. Pixmap pixmap;
  271. XpmImage image;
  272. top = XtAppInitialize(&app, "TestButton", NULL, 0, &argc, argv,
  273. NULL, NULL, 0);
  274. button = XmCreatePushButton(top, "button", NULL, 0);
  275. status = XpmCreateXpmImageFromData ((CHAR **)(bmp->m_ConvertedData),
  276. &image, NULL);
  277. status = XpmCreatePixmapFromXpmImage (XtDisplay(top),
  278. XRootWindowOfScreen(XtScreen(top)),
  279. &image, &pixmap, NULL, NULL);
  280. if (status != XpmSuccess)
  281. {
  282. fprintf (stderr, "XpmError:  %sn", XpmGetErrorString(status));
  283. exit(1);
  284. }
  285. XtVaSetValues(button,
  286. XmNlabelType, XmPIXMAP,
  287. XmNlabelPixmap, pixmap,
  288. NULL);
  289. XtManageChild(button);
  290. XtRealizeWidget(top);
  291. XtAppMainLoop(app);
  292. #endif
  293. delete bmp;
  294. #endif
  295. }
  296. else
  297. {
  298. printf("ERROR: Dialog resource %d not found.",id);
  299. }
  300. return 0;
  301. }
  302. if (strcmp(argv[1],"BITMAPFILE")==0)
  303. {
  304. {
  305. ULONG32 id=atoi(argv[3]);
  306. #ifdef _MACINTOSH
  307. c2pstr(argv[2]);
  308. FSSpec  theFileSpec;
  309. short   fileRef=0;
  310. long    eof=0;
  311. FSMakeFSSpec(0,0,(StringPtr)argv[2],&theFileSpec);
  312. FSpOpenDF(&theFileSpec,fsRdPerm,&fileRef);
  313. GetEOF(fileRef,&eof);
  314. BYTE*   buffer=new BYTE[eof];
  315. BYTE*   p=buffer+14;
  316. HX_ASSERT(buffer);
  317. FSRead(fileRef,&eof,buffer);
  318. FSClose(fileRef);
  319. short                             index=0;
  320. GrafPtr         saveport; GetPort(&saveport);
  321. Rect            wRect={50,50,600,800};
  322. WindowPtr       myWind=NewWindow(NULL,&wRect,"pStringParsing",TRUE,2,(WindowPtr)-1L, FALSE,NULL); 
  323. ShowWindow(myWind);
  324. SetPort(myWind);
  325. //
  326. //      Okay make a CHXXBmp object, and feed the resource data we got into it.
  327. //              
  328. CHXXBitmap*        bmp;
  329. bmp=CHXXBitmap::create((HX_BITMAPINFO*)p);
  330. if (bmp)
  331. {
  332. Rect*   rect=*bmp;
  333. PixMapHandle thePixMap = GetGWorldPixMap( ( GWorldPtr ) *bmp );
  334. CopyBits((const BitMap*)*thePixMap,(const BitMap*)&myWind->portBits,*bmp,*bmp,srcCopy,NULL);
  335. ValidRect((Rect*)bmp);
  336. }
  337. while (!Button())
  338. {
  339. EventRecord     theEvent;
  340. WaitNextEvent(everyEvent,&theEvent,0xFF,NULL);
  341. }
  342. DisposeWindow(myWind);
  343. SetPort(saveport);
  344. bmp->Release();
  345. #endif  
  346. #ifdef _UNIX
  347. //
  348. //      Generate an XPM file.
  349. //                      
  350. CHXXBitmap* bmp;
  351. bmp=CHXXBitmap::create(rsrc);
  352. rsrc->Release();
  353. CHXDataFile*    outputfile;
  354. outputfile=CHXDataFile::Construct();
  355. if (outputfile)
  356. {               
  357. outputfile->Create(argv[4],O_CREAT);
  358. outputfile->Open(argv[4],O_WRONLY);
  359. outputfile->Write((char*)*bmp,strlen(*bmp));
  360. outputfile->Close();
  361. delete outputfile;
  362. }
  363. else
  364. {
  365. printf("Could not create file object.r");
  366. }
  367. delete bmp;
  368. #endif
  369. }
  370. return 0;
  371. }
  372. if (strcmp(argv[1],"ICON")==0)
  373. {
  374. if (HXR_OK != theFile->Open(argv[2]))
  375. {
  376. printf("ERROR: file could not be opened.n");
  377. }
  378. else
  379. {
  380. ULONG32 id=atoi(argv[3]);
  381. #ifdef _MACINTOSH
  382. short                             index=0;
  383. GrafPtr         saveport; GetPort(&saveport);
  384. Rect            wRect={50,50,600,800};
  385. WindowPtr       myWind=NewWindow(NULL,&wRect,"pStringParsing",TRUE,2,(WindowPtr)-1L, FALSE,NULL); 
  386. ShowWindow(myWind);
  387. SetPort(myWind);
  388. //
  389. // Load the icon first
  390. //
  391. IHXXResource*    iconresource;
  392. if (HXR_OK==theFile->GetResource(HX_RT_GROUPICON,id,&rsrc))
  393. {
  394. //
  395. // Create an Icon parser object
  396. //
  397. CHXXIcon*    icon;
  398. icon=CHXXIcon::create(rsrc);
  399. #if 0 /* needs to be re-worked with new icon drawing code */
  400. if (icon)
  401. {
  402. CIconHandle        macicon;
  403. macicon=icon->GetIconHandle();
  404. Rect aRect={0,0,31,31};
  405. FillRect(&aRect,&qd.ltGray);
  406. PlotCIcon(&aRect,macicon);
  407. aRect.top+=32;
  408. aRect.bottom+=32;
  409. FillRect(&aRect,&qd.gray);
  410. PlotCIcon(&aRect,macicon);
  411. aRect.top+=32;
  412. aRect.bottom+=32;
  413. FillRect(&aRect,&qd.dkGray);
  414. PlotCIcon(&aRect,macicon);
  415. aRect.top+=32;
  416. aRect.bottom+=32;
  417. FillRect(&aRect,&qd.white);
  418. PlotCIcon(&aRect,macicon);
  419. aRect.top+=32;
  420. aRect.bottom+=32;
  421. FillRect(&aRect,&qd.black);
  422. PlotCIcon(&aRect,macicon);
  423. while (!Button())
  424. {
  425. EventRecord     theEvent;
  426. WaitNextEvent(everyEvent,&theEvent,0xFF,NULL);
  427. }
  428. HX_DELETE(icon);
  429. }
  430. #endif //
  431. HX_RELEASE(rsrc);
  432. }
  433. DisposeWindow(myWind);
  434. SetPort(saveport);
  435. #endif  
  436. }
  437. return 0;
  438. }
  439. //
  440. //      Menu test
  441. //
  442. if (strcmp(argv[1],"MENU")==0)
  443. {
  444. if (HXR_OK != theFile->Open(argv[2]))
  445. {
  446. printf("ERROR: File could not be openend.n");
  447. }
  448. ULONG32 id=atoi(argv[3]);
  449. IHXXResource*  rsrc=NULL;
  450. if (HXR_OK == theFile->GetResource(HX_RT_MENU,id,&rsrc))
  451. {               
  452. #ifdef _MACINTOSH
  453. CHXXMenu*        pMenu=CHXXMenu::create(rsrc);
  454. rsrc->Release();
  455. if (!pMenu)
  456. {
  457. return;
  458. }
  459. UINT16                          menuid=atoi(argv[3]);
  460. UINT16                          index=0;
  461. MenuHandle                      mainmenu;
  462. MenuHandle                      submenus[10];
  463. HX_MenuItem*            mi=NULL;
  464. ConstStr255Param        pstring;
  465. UINT16                          curitem=1;
  466. memset(submenus,0,sizeof(submenus));
  467. if (HXR_OK==pMenu->GetNthMenuItem(&mi,0))
  468. {
  469. CHXString       thestring;
  470. thestring=mi->szItemText;
  471. pstring=thestring;
  472. mainmenu=NewMenu(menuid,pstring);
  473. index=1;
  474. while (HXR_OK==pMenu->GetNthMenuItem(&mi,index))
  475. {
  476. pstring=mi->szItemText;
  477. if (!IS_POPUP_MENUITEM(mi))
  478. {
  479. if (IS_SEPARATOR_MENUITEM(mi))
  480. {
  481. AppendMenu(mainmenu,"p-");
  482. }
  483. AppendMenu(mainmenu,pstring);
  484. if (IS_DISABLED_MENUITEM(mi))
  485. {
  486. DisableItem(mainmenu,curitem);                                                  
  487. }
  488. if (IS_CHECKED_MENUITEM(mi))
  489. {
  490. CheckItem(mainmenu,curitem,TRUE);                                                       
  491. }                                               
  492. if (mi->wKey && (mi->fKeyFlags & HX_FCONTROL))
  493. {
  494. SetItemCmd(mainmenu,curitem,mi->wKey);
  495. }       
  496. }
  497. else
  498. {
  499. AddSubMenu(mainmenu,pMenu,&index);      
  500. }
  501. index++;
  502. curitem++;
  503. }
  504. InsertMenu(mainmenu,0);
  505. EventRecord     theEvent;
  506. DrawMenuBar();                          
  507. while (true)
  508. {
  509. if (WaitNextEvent(everyEvent,&theEvent,0xFF,NULL))
  510. {
  511. if (theEvent.what==autoKey)
  512. {
  513. break;
  514. }
  515. if (theEvent.what==mouseDown)
  516. {
  517. WindowPtr       whichWin;
  518. short part = FindWindow(theEvent.where,&whichWin);
  519. if (part == inMenuBar)
  520. {
  521. MenuSelect(theEvent.where);
  522. }
  523. }       
  524. }
  525. }
  526. }
  527. #endif
  528. #if 0
  529. //#ifdef _UNIX
  530. CHXXMenu*        pMenu=CHXXMenu::create(rsrc);
  531. HX_MenuItem*            mi=NULL;
  532. if (HXR_OK==pMenu->GetNthMenuItem(&mi,0))
  533. printf ("Menu: 0x%xnItem: %s %s %sn", pMenu, mi->szItemText, mi->szAcceleratorText, mi->szStatusText);
  534. #endif
  535. }
  536. }
  537. if (strcmp(argv[1],"MENUBAR")==0)
  538. {
  539. if (HXR_OK != theFile->Open(argv[2]))
  540. {
  541. printf("ERROR: file could not be opened.n");
  542. }
  543. ULONG32 id=atoi(argv[3]);
  544. IHXXResource*  rsrc=NULL;
  545. if (HXR_OK == theFile->GetResource(HX_RT_MENU,id,&rsrc))
  546. {               
  547. #ifdef _MACINTOSH
  548. CHXXMenuBar*    menubar=CHXXMenuBar::create(rsrc);
  549. ULONG32 index=0;
  550. CHXXMenu*               menu=NULL;
  551. gSubLevel=0;
  552. while (HXR_OK==menubar->GetMenuByIndex(&menu,index))
  553. {
  554. gSubLevel=0;
  555. UINT16  itemindex=0;
  556. AddSubMenu(NULL,menu,&itemindex);
  557. index++;
  558. }
  559. EventRecord     theEvent;
  560. DrawMenuBar();                          
  561. while (true)
  562. {
  563. if (WaitNextEvent(everyEvent,&theEvent,0xFF,NULL))
  564. {
  565. if (theEvent.what==autoKey)
  566. {
  567. break;
  568. }
  569. if (theEvent.what==mouseDown)
  570. {
  571. WindowPtr       whichWin;
  572. short part = FindWindow(theEvent.where,&whichWin);
  573. if (part == inMenuBar)
  574. {
  575. MenuSelect(theEvent.where);
  576. }
  577. }       
  578. }
  579. }
  580. #endif                  
  581. #if 0
  582. //#ifdef _UNIX
  583.             CHXXMenuBar*    menubar=CHXXMenuBar::create(rsrc);
  584. #endif                  
  585. }
  586. theFile->Close();
  587. return 0;
  588. }       
  589. if (strcmp(argv[1],"CURSOR")==0)
  590. {
  591. if (HXR_OK != theFile->Open(argv[2]))
  592. {
  593. printf("ERROR: file could not be opened.n");
  594. }
  595. ULONG32 id=atoi(argv[3]);
  596. IHXXResource*  rsrc=NULL;
  597. if (HXR_OK == theFile->GetResource(HX_RT_GROUPCURSOR,id,&rsrc))
  598. {               
  599. CHXXCursor*             theCursor=CHXXCursor::create(rsrc);
  600. #ifdef _MACINTOSH                
  601. HX_ASSERT(theCursor);
  602. if (theCursor)
  603. {
  604. SetCursor(*theCursor);
  605. }
  606. while (!Button())
  607. {
  608. EventRecord     theEvent;
  609. WaitNextEvent(everyEvent,&theEvent,0xFF,NULL);
  610. }
  611. #endif                
  612. }
  613. theFile->Close();
  614. return 0;
  615. }       
  616. if (strcmp(argv[1],"STRING")==0)
  617. {
  618. if (HXR_OK != theFile->Open(argv[2]))
  619. {
  620. printf("ERROR: File could not be opened.n");
  621. }
  622. IHXXResource*   res;
  623. ID= atoi(argv[3]);
  624. res=theFile->GetString(ID);
  625. if (res)
  626. {
  627. printf("%s",(char*)res->ResourceData());
  628. res->Release();
  629. }
  630. theFile->Close();
  631. return 0;
  632. }
  633. return 0;
  634. }
  635. #ifdef _MACINTOSH
  636. void    AddSubMenu(MenuHandle   menu, CHXXMenu* pMenu,UINT16*  index)
  637. {
  638. HX_MenuItem*    mi=NULL;
  639. pMenu->GetNthMenuItem(&mi,*index);
  640. MenuHandle      submenu=NewMenu(gSubMenuID++,mi->szItemText);
  641. ULONG32         curitem=1;
  642. if (menu)
  643. {
  644. InsertMenu  (submenu,-1);
  645. AppendMenu(menu,mi->szItemText);
  646. UINT16  thisitem=CountMenuItems(menu);
  647. SetItemCmd(menu,thisitem,hMenuCmd);
  648. SetItemMark(menu,thisitem,(char)(gSubMenuID-1));
  649. }
  650. else
  651. {
  652. InsertMenu (submenu,0);
  653. }               
  654. gSubLevel++;    
  655. (*index)++;
  656. while (HXR_OK==pMenu->GetNthMenuItem(&mi,*index))
  657. {
  658. if (IS_SEPARATOR_MENUITEM(mi))
  659. {
  660. AppendMenu(submenu,"p-");
  661. }
  662. if (mi->wSubLevel < gSubLevel)
  663. {
  664. (*index)--;
  665. gSubLevel--;
  666. return;
  667. }
  668. if (IS_POPUP_MENUITEM(mi))
  669. {
  670. AddSubMenu(submenu,pMenu,index);        
  671. }
  672. else
  673. {
  674. AppendMenu(submenu,mi->szItemText);     
  675. if (IS_DISABLED_MENUITEM(mi))
  676. {
  677. DisableItem(submenu,curitem);                                                   
  678. }
  679. if (IS_CHECKED_MENUITEM(mi))
  680. {
  681. CheckItem(submenu,curitem,TRUE);                                                        
  682. }
  683. if (mi->wKey && (mi->fKeyFlags & HX_FCONTROL))
  684. {
  685. SetItemCmd(submenu,curitem,mi->wKey);
  686. }               
  687. }
  688. curitem++;
  689. (*index)++;
  690. }
  691. }
  692. #endif