pace.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:68k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: pace.c 531 2006-01-04 12:56:13Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #include "../common.h"
  24. #if defined(TARGET_PALMOS)
  25. #include "pace.h"
  26. #include "peal/arm/pealstub.h"
  27. //tremor uses lot of alloca()
  28. #define STACKSIZE 0x8000
  29. //#define STACKCHECK
  30. #ifdef HAVE_PALMONE_SDK
  31. #define NO_HSEXT_TRAPS
  32. #include <68K/System/HardwareUtils68K.h>
  33. #include <Common/System/HsNavCommon.h>
  34. #include <68K/System/HsExt.h>
  35. #endif
  36. typedef struct launch
  37. {
  38. UInt32 PealCall; //BE
  39. UInt32 Module; //BE
  40. UInt32 LoadModule; //BE
  41. UInt32 FreeModule; //BE
  42. UInt32 GetSymbol; //BE
  43. UInt16 launchParameters[2];
  44. UInt16 launchCode;
  45. UInt16 launchFlags;
  46. } launch;
  47. typedef struct gadgethandler
  48. {
  49. uint8_t Code[68];
  50. struct gadgethandler* Next;
  51. FormGadgetTypeInCallback* Gadget; //BE
  52. uint16_t* Event; //BE
  53. UInt16 Cmd; //BE
  54. UInt32 Module; //BE
  55. UInt32 PealCall; //BE
  56. UInt32 Wrapper; //BE
  57. FormType* Form;
  58. int Index;
  59. FormGadgetHandlerType* Handler; 
  60. } gadgethandler;
  61. typedef struct eventhandler
  62. {
  63. uint8_t Code[48];
  64. struct eventhandler* Next;
  65. uint16_t* Event; //BE
  66. UInt32 Module; //BE
  67. UInt32 PealCall; //BE
  68. UInt32 Wrapper; //BE
  69. FormType* Form;
  70. FormEventHandlerType *Handler;
  71. } eventhandler;
  72. static gadgethandler* GadgetHandler = NULL;
  73. static eventhandler* EventHandler = NULL;
  74. static launch Peal = {0};
  75. static NOINLINE void FreeHandlers()
  76. {
  77. gadgethandler* j;
  78. eventhandler* i;
  79. while ((i=EventHandler)!=NULL)
  80. {
  81. EventHandler = i->Next;
  82. MemPtrFree(i);
  83. }
  84. while ((j=GadgetHandler)!=NULL)
  85. {
  86. GadgetHandler = j->Next;
  87. MemPtrFree(j);
  88. }
  89. }
  90. static NOINLINE void SwapLanchParameters(int launchCode,void* launchParameters,bool_t From)
  91. {
  92. if (launchCode == sysAppLaunchCmdCustomBase)
  93. {
  94. vfspath* p = (vfspath*)launchParameters;
  95. p->volRefNum = SWAP16(p->volRefNum);
  96. }
  97. if (launchCode == sysAppLaunchCmdOpenDB)
  98. {
  99. UInt16 tmp;
  100. SysAppLaunchCmdOpenDBType2* p = (SysAppLaunchCmdOpenDBType2*)launchParameters;
  101. p->cardNo = SWAP16(p->cardNo);
  102. tmp = p->dbID[0];
  103. p->dbID[0] = SWAP16(p->dbID[1]);
  104. p->dbID[1] = SWAP16(tmp);
  105. }
  106. if (launchCode == sysAppLaunchCmdNotify)
  107. {
  108. SysNotifyParamType* p = (SysNotifyParamType*)launchParameters;
  109. UInt32 Type = p->notifyType;
  110. void* Details = p->notifyDetailsP;
  111. p->notifyType = SWAP32(p->notifyType);
  112. p->broadcaster = SWAP32(p->broadcaster);
  113. p->notifyDetailsP = (void*)SWAP32(p->notifyDetailsP);
  114. p->userDataP = (void*)SWAP32(p->userDataP);
  115. if (From)
  116. {
  117. Type = p->notifyType;
  118. Details = p->notifyDetailsP;
  119. }
  120. if (Type == sysNotifySleepRequestEvent)
  121. {
  122. SleepEventParamType* i = (SleepEventParamType*)Details;
  123. i->reason = SWAP16(i->reason);
  124. i->deferSleep = SWAP16(i->deferSleep);
  125. }
  126. }
  127. }
  128. static INLINE uint32_t ReadSwap32(const void* p)
  129. {
  130. return 
  131. (((const uint8_t*)p)[0] << 24)|
  132. (((const uint8_t*)p)[1] << 16)|
  133. (((const uint8_t*)p)[2] << 8)|
  134. (((const uint8_t*)p)[3] << 0);
  135. }
  136. static INLINE void WriteSwap32(void* p,uint32_t i)
  137. {
  138. ((uint8_t*)p)[0] = ((uint8_t*)&i)[3];
  139. ((uint8_t*)p)[1] = ((uint8_t*)&i)[2];
  140. ((uint8_t*)p)[2] = ((uint8_t*)&i)[1];
  141. ((uint8_t*)p)[3] = ((uint8_t*)&i)[0];
  142. }
  143. void Event_M68K_To_ARM(const uint16_t* In,EventType* Out)
  144. {
  145. Out->eType = SWAP16(In[0]);
  146. Out->penDown = ((uint8_t*)In)[2];
  147. Out->tapCount = ((uint8_t*)In)[3];
  148. Out->screenX = SWAP16(In[2]);
  149. Out->screenY = SWAP16(In[3]);
  150. switch (Out->eType)
  151. {
  152. // 1*16bit
  153. case frmLoadEvent:
  154. case menuEvent:
  155. Out->data.menu.itemID = SWAP16(In[4]);
  156. break;
  157. // 3*16bit
  158. case frmUpdateEvent:
  159. case keyUpEvent:
  160. case keyDownEvent:
  161. case keyHoldEvent:
  162. Out->data.keyDown.chr = SWAP16(In[4]);
  163. Out->data.keyDown.keyCode = SWAP16(In[5]);
  164. Out->data.keyDown.modifiers = SWAP16(In[6]);
  165. break;
  166. // 16bit,32bit
  167. /* case fldChangedEvent:
  168. Out->data.fldChanged.fieldID = SWAP16(In[4]);
  169. Out->data.fldChanged.pField = (FieldType*)ReadSwap32(In+5);
  170. break;
  171. */
  172. // 16bit,32bit,16bit,32bit,16bit,16bit
  173. case popSelectEvent:
  174. Out->data.popSelect.controlID = SWAP16(In[4]);
  175. Out->data.popSelect.controlP = (ControlType*)ReadSwap32(In+5);
  176. Out->data.popSelect.listID = SWAP16(In[7]);
  177. Out->data.popSelect.listP = (ListType*)SWAP32(*(uint32_t*)(In+8));
  178. Out->data.popSelect.selection = SWAP16(In[10]);
  179. Out->data.popSelect.priorSelection = SWAP16(In[11]);
  180. break;
  181. // 16bit,32bit,16bit
  182. case lstSelectEvent:
  183. Out->data.lstSelect.listID = SWAP16(In[4]);
  184. Out->data.lstSelect.pList = (ListType*)ReadSwap32(In+5);
  185. Out->data.lstSelect.selection = SWAP16(In[7]);
  186. break;
  187. //custom
  188. case sclRepeatEvent:
  189. Out->data.sclRepeat.scrollBarID = SWAP16(In[4]);
  190. Out->data.sclRepeat.pScrollBar = (ScrollBarType*)ReadSwap32(In+5);
  191. Out->data.sclRepeat.value = SWAP16(In[7]);
  192. Out->data.sclRepeat.newValue = SWAP16(In[8]);
  193. Out->data.sclRepeat.time = ReadSwap32(In+9);
  194. break;
  195. //custom
  196. case ctlRepeatEvent:
  197. Out->data.ctlRepeat.controlID = SWAP16(In[4]);
  198. Out->data.ctlRepeat.pControl = (ControlType*)ReadSwap32(In+5);
  199. Out->data.ctlRepeat.time = ReadSwap32(In+7);
  200. Out->data.ctlRepeat.value = SWAP16(In[9]);
  201. break;
  202. //custom
  203. case ctlSelectEvent: 
  204. Out->data.ctlSelect.controlID = SWAP16(In[4]);
  205. Out->data.ctlSelect.pControl = (ControlType*)ReadSwap32(In+5);
  206. Out->data.ctlSelect.on = ((uint8_t*)In)[14];
  207. Out->data.ctlSelect.reserved1 = ((uint8_t*)In)[15];
  208. Out->data.ctlSelect.value = SWAP16(In[8]);
  209. break;
  210. // 2*32bit
  211. case winEnterEvent:
  212. case winExitEvent:
  213. Out->data.winExit.enterWindow = (WinHandle)SWAP32(((uint32_t*)In)[2]);
  214. Out->data.winExit.exitWindow = (WinHandle)SWAP32(((uint32_t*)In)[3]);
  215. break;
  216. default:
  217. memcpy(Out->data.generic.datum,In+4,sizeof(uint16_t)*8);
  218. break;
  219. }
  220. }
  221. void Event_ARM_To_M68K(const EventType* In,uint16_t* Out)
  222. {
  223. Out[0] = SWAP16(In->eType);
  224. ((uint8_t*)Out)[2] = In->penDown;
  225. ((uint8_t*)Out)[3] = In->tapCount;
  226. Out[2] = SWAP16(In->screenX);
  227. Out[3] = SWAP16(In->screenY);
  228. switch (In->eType)
  229. {
  230. // 1*16bit
  231. case frmLoadEvent:
  232. case menuEvent:
  233. Out[4] = SWAP16(In->data.menu.itemID);
  234. break;
  235. // 3*16bit
  236. case frmUpdateEvent:
  237. case keyUpEvent:
  238. case keyDownEvent:
  239. case keyHoldEvent:
  240. Out[4] = SWAP16(In->data.keyDown.chr);
  241. Out[5] = SWAP16(In->data.keyDown.keyCode);
  242. Out[6] = SWAP16(In->data.keyDown.modifiers);
  243. break;
  244. // 16bit,32bit,16bit
  245. case lstSelectEvent:
  246. Out[4] = SWAP16(In->data.lstSelect.listID);
  247. WriteSwap32(Out+5,(uint32_t)In->data.lstSelect.pList);
  248. Out[7] = SWAP16(In->data.lstSelect.selection);
  249. break;
  250. // 16bit,32bit
  251. /* case fldChangedEvent:
  252. Out[4] = SWAP16(In->data.fldChanged.fieldID);
  253. WriteSwap32(Out+5,(uint32_t)In->data.fldChanged.pField);
  254. break;
  255. */
  256. // 16bit,32bit,16bit,32bit,16bit,16bit
  257. case popSelectEvent:
  258. Out[4] = SWAP16(In->data.popSelect.controlID);
  259. WriteSwap32(Out+5,(uint32_t)In->data.popSelect.controlP);
  260. Out[7] = SWAP16(In->data.popSelect.listID);
  261. WriteSwap32(Out+8,(uint32_t)In->data.popSelect.listP);
  262. Out[10] = SWAP16(In->data.popSelect.selection);
  263. Out[11] = SWAP16(In->data.popSelect.priorSelection);
  264. break;
  265. //custom
  266. case sclRepeatEvent:
  267. Out[4] = SWAP16(In->data.sclRepeat.scrollBarID);
  268. WriteSwap32(Out+5,(uint32_t)In->data.sclRepeat.pScrollBar);
  269. Out[7] = SWAP16(In->data.sclRepeat.value);
  270. Out[8] = SWAP16(In->data.sclRepeat.newValue);
  271. WriteSwap32(Out+9,In->data.sclRepeat.time);
  272. break;
  273. //custom
  274. case ctlRepeatEvent:
  275. Out[4] = SWAP16(In->data.ctlRepeat.controlID);
  276. WriteSwap32(Out+5,(uint32_t)In->data.ctlRepeat.pControl);
  277. WriteSwap32(Out+7,In->data.ctlRepeat.time);
  278. Out[9] = SWAP16(In->data.ctlRepeat.value);
  279. break;
  280. //custom
  281. case ctlSelectEvent: 
  282. Out[4] = SWAP16(In->data.ctlSelect.controlID);
  283. WriteSwap32(Out+5,(uint32_t)In->data.ctlSelect.pControl);
  284. ((uint8_t*)Out)[14] = In->data.ctlSelect.on;
  285. ((uint8_t*)Out)[15] = In->data.ctlSelect.reserved1;
  286. Out[8] = SWAP16(In->data.ctlSelect.value);
  287. break;
  288. // 2*32bit
  289. case winEnterEvent:
  290. case winExitEvent:
  291. ((uint32_t*)Out)[2] = SWAP32(In->data.winExit.enterWindow);
  292. ((uint32_t*)Out)[3] = SWAP32(In->data.winExit.exitWindow);
  293. break;
  294. default:
  295. memcpy(Out+4,In->data.generic.datum,sizeof(uint16_t)*8);
  296. break;
  297. }
  298. }
  299. static void GadgetTypeInCallback_M68K_To_ARM(const uint16_t* In,FormGadgetTypeInCallback* Out)
  300. {
  301. Out->id = SWAP16(In[0]);
  302. *(UInt16*)&Out->attr = SWAP16(In[1]);
  303. Out->rect.topLeft.x = SWAP16(In[2]);
  304. Out->rect.topLeft.y = SWAP16(In[3]);
  305. Out->rect.extent.x = SWAP16(In[4]);
  306. Out->rect.extent.y = SWAP16(In[5]);
  307. Out->data = (const void*)SWAP32(*(const uint32_t*)(In+6));
  308. Out->handler = (FormGadgetHandlerType*)SWAP32(*(const uint32_t*)(In+8));
  309. }
  310. static void GadgetTypeInCallback_ARM_To_M68K(const FormGadgetTypeInCallback* In,uint16_t* Out)
  311. {
  312. Out[0] = SWAP16(In->id);
  313. Out[1] = SWAP16(*(UInt16*)&In->attr);
  314. Out[2] = SWAP16(In->rect.topLeft.x);
  315. Out[3] = SWAP16(In->rect.topLeft.y);
  316. Out[4] = SWAP16(In->rect.extent.x);
  317. Out[5] = SWAP16(In->rect.extent.y);
  318. *(uint32_t*)(Out+6) = SWAP32(In->data);
  319. *(uint32_t*)(Out+8) = SWAP32(In->handler);
  320. }
  321. static NOINLINE bool_t CmdLaunch(int Code)
  322. {
  323. return Code == sysAppLaunchCmdNormalLaunch ||
  324. Code == sysAppLaunchCmdOpenDB ||
  325. Code == sysAppLaunchCmdCustomBase;
  326. }
  327. #if defined(_M_IX86)
  328. #define NONE 0
  329. pcecall PceCall = {NULL};
  330. #include <windows.h>
  331. DLLEXPORT uint32_t PaceMain86(const void *emulStateP, launch* Launch, Call68KFuncType *call68KFuncP)
  332. {
  333. MemPtr Parameters = (MemPtr)((SWAP16(Launch->launchParameters[0])<<16)|(SWAP16(Launch->launchParameters[1])));
  334. int Code = SWAP16(Launch->launchCode);
  335. uint32_t Result; 
  336. pcecall Old = PceCall;
  337. if (CmdLaunch(Code))
  338. memcpy(&Peal,Launch,sizeof(launch));
  339. PceCall.Func = call68KFuncP;
  340. PceCall.State = emulStateP;
  341. SwapLanchParameters(Code,Parameters,1);
  342. Result = PilotMain((UInt16)Code,Parameters,SWAP16(Launch->launchFlags));
  343. SwapLanchParameters(Code,Parameters,0);
  344. if (CmdLaunch(Code))
  345. FreeHandlers();
  346. PceCall = Old;
  347. return Result;
  348. }
  349. void SaveSysRegs(sysregs* p)
  350. {
  351. }
  352. void LoadSysRegs(sysregs* p)
  353. {
  354. }
  355. static NOINLINE unsigned long Call68K(unsigned long trapOrFunction,
  356. const void *argsOnStackP, unsigned long argsSizeAndwantA0)
  357. {
  358. pcecall* Call = &PceCall;
  359. return Call->Func(Call->State,trapOrFunction,argsOnStackP,argsSizeAndwantA0);
  360. }
  361. DLLEXPORT Boolean WrapperEventHandler86(const void *emulStateP, eventhandler* i, Call68KFuncType *call68KFuncP)
  362. {
  363. Boolean Result;
  364. EventType EventARM;
  365. uint16_t* EventM68K = (uint16_t*) SWAP32(i->Event);
  366. pcecall Old = PceCall;
  367. PceCall.Func = call68KFuncP;
  368. PceCall.State = emulStateP;
  369. Event_M68K_To_ARM(EventM68K,&EventARM);
  370. Result = i->Handler(&EventARM);
  371. if (!Result && EventARM.eType == frmCloseEvent)
  372. i->Form = NULL;
  373. PceCall = Old;
  374. return Result;
  375. }
  376. DLLEXPORT Boolean WrapperGadgetHandler86(const void *emulStateP, gadgethandler* i, Call68KFuncType *call68KFuncP)
  377. {
  378. EventType EventARM;
  379. Boolean Result;
  380. FormGadgetTypeInCallback GadgetARM;
  381. uint16_t* Gadget = (uint16_t*) SWAP32(i->Gadget);
  382. UInt16 Cmd = SWAP16(i->Cmd);
  383. uint16_t* EventM68K = (uint16_t*) SWAP32(i->Event);
  384. pcecall Old = PceCall;
  385. PceCall.Func = call68KFuncP;
  386. PceCall.State = emulStateP;
  387. GadgetTypeInCallback_M68K_To_ARM(Gadget,&GadgetARM);
  388. if (Cmd == formGadgetHandleEventCmd)
  389. Event_M68K_To_ARM(EventM68K,&EventARM);
  390. Result = i->Handler(&GadgetARM,Cmd,&EventARM);
  391. GadgetTypeInCallback_ARM_To_M68K(&GadgetARM,Gadget);
  392. if (Cmd == formGadgetDeleteCmd)
  393. i->Form = NULL;
  394. PceCall = Old;
  395. return Result;
  396. }
  397. #elif defined(ARM)
  398. #define NONE
  399. void SaveSysRegs(sysregs* p)
  400. {
  401. p->SysReg = PceCall.SysReg;
  402. asm volatile(
  403. "mov %0, r10nt"
  404. : "=&r"(p->GOT) : : "cc");
  405. }
  406. void LoadSysRegs(sysregs* p)
  407. {
  408. asm volatile(
  409. "mov r9,%0nt"
  410. "mov r10,%1nt"
  411. : : "r"(p->SysReg),"r"(p->GOT): "cc");
  412. }
  413. static NOINLINE unsigned long Call68K(unsigned long trapOrFunction,
  414.   const void *argsOnStackP, unsigned long argsSizeAndwantA0)
  415. {
  416. pcecall* Call = &PceCall;
  417. unsigned long Result;
  418. register void *SysReg asm("r9") = Call->SysReg;
  419. Result = Call->Func(Call->State,trapOrFunction,argsOnStackP,argsSizeAndwantA0);
  420. Call->SysReg = SysReg;
  421. return Result;
  422. }
  423. static NOINLINE void SafeMemCpy(void* d,const void* s,int n)
  424. {
  425. uint8_t* d8 = (uint8_t*)d;
  426. const uint8_t* s8= (const uint8_t*)s;
  427. for (;n>0;--n,++d8,++s8)
  428. *d8 = *s8;
  429. }
  430. #ifdef STACKCHECK
  431. static void NOINLINE StackCheck(char* p)
  432. {
  433. int i;
  434. for (i=0;i<STACKSIZE;++i)
  435. if (p[i] != 0x55)
  436. break;
  437. if (i < 4096)
  438. {
  439. char s[64];
  440. sprintf(s,"Possible stack overflow %d/%d. ",i,STACKSIZE);
  441. FrmCustomAlert(WarningOKAlert, s, "Please contact developer!", " ");
  442. }
  443. }
  444. #endif
  445. uint32_t PaceMain(launch* Launch)
  446. {
  447. MemPtr Parameters = (MemPtr)((SWAP16(Launch->launchParameters[0])<<16)|(SWAP16(Launch->launchParameters[1])));
  448. int Code = SWAP16(Launch->launchCode);
  449. void* Old = NULL;
  450. char* Stack = NULL;
  451. uint32_t Result; 
  452. if (CmdLaunch(Code))
  453. {
  454. SafeMemCpy(&Peal,Launch,sizeof(launch));
  455. Stack = MemGluePtrNew(STACKSIZE);
  456. if (!Stack)
  457. return errNone;
  458. memset(Stack,0x55,STACKSIZE);
  459. Old = SwapSP(Stack+STACKSIZE);
  460. }
  461. SwapLanchParameters(Code,Parameters,1);
  462. Result = PilotMain(Code,Parameters,SWAP16(Launch->launchFlags));
  463. SwapLanchParameters(Code,Parameters,0);
  464. if (Stack)
  465. {
  466. SwapSP(Old);
  467. #ifdef STACKCHECK
  468. StackCheck(Stack);
  469. #endif
  470. MemPtrFree(Stack);
  471. FreeHandlers();
  472. }
  473. return Result;
  474. }
  475. static Boolean WrapperEventHandler(eventhandler* i)
  476. {
  477. Boolean Result;
  478. EventType EventARM;
  479. const uint16_t* EventM68K = (const uint16_t*) SWAP32(i->Event);
  480. Event_M68K_To_ARM(EventM68K,&EventARM);
  481. Result = i->Handler(&EventARM);
  482. if (!Result && EventARM.eType == frmCloseEvent)
  483. i->Form = NULL;
  484. return Result;
  485. }
  486. static Boolean WrapperGadgetHandler(gadgethandler* i)
  487. {
  488. EventType EventARM;
  489. Boolean Result;
  490. FormGadgetTypeInCallback GadgetARM;
  491. uint16_t* Gadget = (uint16_t*) SWAP32(i->Gadget);
  492. UInt16 Cmd = SWAP16(i->Cmd);
  493. const uint16_t* EventM68K = (const uint16_t*) SWAP32(i->Event);
  494. GadgetTypeInCallback_M68K_To_ARM(Gadget,&GadgetARM);
  495. if (Cmd == formGadgetHandleEventCmd)
  496. Event_M68K_To_ARM(EventM68K,&EventARM);
  497. Result = i->Handler(&GadgetARM,Cmd,&EventARM);
  498. GadgetTypeInCallback_ARM_To_M68K(&GadgetARM,Gadget);
  499. if (Cmd == formGadgetDeleteCmd)
  500. i->Form = NULL;
  501. return Result;
  502. }
  503. #else
  504. #error Not supported platform
  505. #endif
  506. typedef struct emustate
  507. {
  508. uint32_t instr;
  509. uint32_t regD[8];
  510. uint32_t regA[8];
  511. uint32_t regPC;
  512. } emustate;
  513. #define PACE_PARAM _v
  514. #define PACE_BEGIN(declare) NOINLINE declare { uint16_t PACE_PARAM[] = {
  515. #define PACE_BEGINEVENT(declare) NOINLINE declare { uint16_t ev[12]; uint16_t PACE_PARAM[] = {
  516. #define PACE_BEGINEX(declare,name) NOINLINE declare { uint16_t name[] = {
  517. #define PACE_VAR(name) }; uint16_t name[] = {
  518. #define PACE_ADD8(name)  (uint8_t)name,
  519. #define PACE_ADD16(name)  SWAP16(name),
  520. #define PACE_ADD32(name) SWAP16(((uint32_t)(name))>>16),SWAP16(name),
  521. #define PACE_DATA16(name) *name = SWAP16(*name);
  522. #define PACE_DATA32(name) *name = SWAP32(*name);
  523. #define PACE_CDATA16(name) if (name) *name = SWAP16(*name);
  524. #define PACE_CDATA32(name) if (name) *name = SWAP32(*name);
  525. #define PACE_SEL(sel) ((emustate*)PceCall.State)->regD[2] = sel;
  526. #define PACE_END(Trap,PreProcess,PostProcess) }; PreProcess; 
  527.     Call68K(PceNativeTrapNo(Trap),PACE_PARAM,sizeof(PACE_PARAM)); 
  528. PostProcess; }
  529. #define PACE_ENDVOID(Trap,PreProcess,PostProcess) 0}; PreProcess; 
  530.     Call68K(PceNativeTrapNo(Trap),PACE_PARAM,0); 
  531. PostProcess; }
  532. #define PACE_END8(Trap,PreProcess,PostProcess) }; uint32_t ret; PreProcess; 
  533. ret = Call68K(PceNativeTrapNo(Trap),PACE_PARAM,sizeof(PACE_PARAM)); 
  534. PostProcess; return (uint8_t)ret; }
  535. #define PACE_END8VOID(Trap,PreProcess,PostProcess) 0}; uint32_t ret; PreProcess; 
  536. ret = Call68K(PceNativeTrapNo(Trap),PACE_PARAM,0); 
  537. PostProcess; return (uint8_t)ret; }
  538. #define PACE_END16(Trap,PreProcess,PostProcess) }; uint32_t ret; PreProcess; 
  539. ret = Call68K(PceNativeTrapNo(Trap),PACE_PARAM,sizeof(PACE_PARAM)); 
  540. PostProcess; return (uint16_t)ret; }
  541. #define PACE_END16VOID(Trap,PreProcess,PostProcess) 0}; uint32_t ret; PreProcess; 
  542. ret = Call68K(PceNativeTrapNo(Trap),PACE_PARAM,0); 
  543. PostProcess; return (uint16_t)ret; }
  544. #define PACE_END32(Trap,PreProcess,PostProcess) }; uint32_t ret; PreProcess; 
  545. ret = Call68K(PceNativeTrapNo(Trap),PACE_PARAM,sizeof(PACE_PARAM)); 
  546. PostProcess; return ret; }
  547. #define PACE_END32VOID(Trap,PreProcess,PostProcess) 0}; uint32_t ret; PreProcess; 
  548. ret = Call68K(PceNativeTrapNo(Trap),PACE_PARAM,0); 
  549. PostProcess; return ret; }
  550. #define PACE_ENDPTR(Trap,PreProcess,PostProcess) }; uint32_t ret; PreProcess; 
  551. ret = Call68K(PceNativeTrapNo(Trap),PACE_PARAM,sizeof(PACE_PARAM)|kPceNativeWantA0); 
  552. PostProcess; return (void*)ret; }
  553. #define PACE_ENDPTRVOID(Trap,PreProcess,PostProcess) 0}; uint32_t ret; PreProcess; 
  554. ret = Call68K(PceNativeTrapNo(Trap),PACE_PARAM,0|kPceNativeWantA0); 
  555. PostProcess; return (void*)ret; }
  556. static NOINLINE void SwapBlock32(void* Ptr,int n)
  557. {
  558. if (Ptr)
  559. {
  560. int i;
  561. char* p = (char*)Ptr;
  562. for (i=0;i<n;++i,p+=4)
  563. PACE_DATA32((uint32_t*)p);
  564. }
  565. }
  566. static NOINLINE void SwapStruct(void* Ptr,...)
  567. {
  568. if (Ptr)
  569. {
  570. int Size;
  571. char* p = (char*)Ptr;
  572. va_list Args;
  573. va_start(Args,Ptr);
  574. while ((Size = va_arg(Args,int))!=0)
  575. {
  576. if (Size == 4)
  577. PACE_DATA32((uint32_t*)p)
  578. else
  579. if (Size == 2)
  580. PACE_DATA16((uint16_t*)p)
  581. p += Size;
  582. }
  583. va_end(Args);
  584. }
  585. }
  586. //---------------------------------------------------------------------
  587. PACE_BEGIN(Int32 GetOEMSleepMode())
  588. PACE_END32VOID(sysTrapOEMDispatch2,PACE_SEL(263),NONE)
  589. PACE_BEGIN(Err SetOEMSleepMode(Int32 Mode))
  590. PACE_ADD32(Mode)
  591. PACE_END16(sysTrapOEMDispatch2,PACE_SEL(264),NONE)
  592. PACE_BEGIN(UInt16 SysGetOrientation())
  593. PACE_END16VOID(sysTrapPinsDispatch,PACE_SEL(pinSysGetOrientation),NONE)
  594. PACE_BEGIN(Err WinGetPixelRGB(Coord x, Coord y, RGBColorType* rgbP))
  595. PACE_ADD16(x)
  596. PACE_ADD16(y)
  597. PACE_ADD32(rgbP)
  598. PACE_END16(sysTrapWinGetPixelRGB,NONE,NONE)
  599. PACE_BEGIN(void WinSetForeColorRGB(const RGBColorType* newRgbP, RGBColorType* prevRgbP))
  600. PACE_ADD32(newRgbP)
  601. PACE_ADD32(prevRgbP)
  602. PACE_END(sysTrapWinSetForeColorRGB,NONE,NONE)
  603. PACE_BEGIN(void WinPaintPixel(Coord x, Coord y))
  604. PACE_ADD16(x)
  605. PACE_ADD16(y)
  606. PACE_END(sysTrapWinPaintPixel,NONE,NONE)
  607. PACE_BEGIN(void WinDrawPixel(Coord x, Coord y))
  608. PACE_ADD16(x)
  609. PACE_ADD16(y)
  610. PACE_END(sysTrapWinDrawPixel,NONE,NONE)
  611. PACE_BEGIN(void FrmSetFocus(FormType *formP, UInt16 fieldIndex))
  612. PACE_ADD32(formP)
  613. PACE_ADD16(fieldIndex)
  614. PACE_END(sysTrapFrmSetFocus,NONE,NONE)
  615. PACE_BEGIN(void FrmSetTitle (FormType *formP, Char *newTitle))
  616. PACE_ADD32(formP)
  617. PACE_ADD32(newTitle)
  618. PACE_END(sysTrapFrmSetTitle,NONE,NONE)
  619. PACE_BEGIN(FormObjectKind FrmGetObjectType(const FormType *formP, UInt16 objIndex))
  620. PACE_ADD32(formP)
  621. PACE_ADD16(objIndex)
  622. PACE_END8(sysTrapFrmGetObjectType,NONE,NONE)
  623. PACE_BEGIN(FormLabelType *FrmNewLabel (FormType **formPP, UInt16 ID, const Char *textP,
  624. Coord x, Coord y, FontID font))
  625. PACE_ADD32(formPP)
  626. PACE_ADD16(ID)
  627. PACE_ADD32(textP)
  628. PACE_ADD16(x)
  629. PACE_ADD16(y)
  630. PACE_ADD8(font)
  631. PACE_ENDPTR(sysTrapFrmNewLabel,PACE_CDATA32((UInt32*)formPP),PACE_CDATA32((UInt32*)formPP))
  632. PACE_BEGIN(FormType *FrmNewForm(UInt16 formID, const Char *titleStrP,
  633. Coord x, Coord y, Coord width, Coord height, Boolean modal,
  634. UInt16 defaultButton, UInt16 helpRscID, UInt16 menuRscID))
  635. PACE_ADD16(formID)
  636. PACE_ADD32(titleStrP)
  637. PACE_ADD16(x)
  638. PACE_ADD16(y)
  639. PACE_ADD16(width)
  640. PACE_ADD16(height)
  641. PACE_ADD8(modal)
  642. PACE_ADD16(defaultButton)
  643. PACE_ADD16(helpRscID)
  644. PACE_ADD16(menuRscID)
  645. PACE_ENDPTR(sysTrapFrmNewForm,NONE,NONE)
  646. PACE_BEGIN(void FrmCloseAllForms())
  647. PACE_ENDVOID(sysTrapFrmCloseAllForms,NONE,NONE)
  648. PACE_BEGIN(UInt16 FrmGetObjectId (const FormType *formP, UInt16 objIndex))
  649. PACE_ADD32(formP)
  650. PACE_ADD16(objIndex)
  651. PACE_END16(sysTrapFrmGetObjectId,NONE,NONE)
  652. PACE_BEGIN(UInt16 FrmGetNumberOfObjects(const FormType *formP))
  653. PACE_ADD32(formP)
  654. PACE_END16(sysTrapFrmGetNumberOfObjects,NONE,NONE)
  655. PACE_BEGIN(UInt16 FrmGetActiveFormID())
  656. PACE_END16VOID(sysTrapFrmGetActiveFormID,NONE,NONE)
  657. PACE_BEGIN(void FrmGotoForm (UInt16 formId))
  658. PACE_ADD16(formId)
  659. PACE_END(sysTrapFrmGotoForm,NONE,NONE)
  660. PACE_BEGIN(void CtlSetUsable (ControlType *controlP, Boolean usable))
  661. PACE_ADD32(controlP)
  662. PACE_ADD8(usable)
  663. PACE_END(sysTrapCtlSetUsable,NONE,NONE)
  664. PACE_BEGIN(Int16 CtlGetValue (const ControlType *controlP))
  665. PACE_ADD32(controlP)
  666. PACE_END16(sysTrapCtlGetValue,NONE,NONE)
  667. PACE_BEGIN(void CtlSetValue (ControlType *controlP, Int16 newValue))
  668. PACE_ADD32(controlP)
  669. PACE_ADD16(newValue)
  670. PACE_END(sysTrapCtlSetValue,NONE,NONE)
  671. PACE_BEGIN(void CtlSetLabel (ControlType *controlP, const Char *newLabel))
  672. PACE_ADD32(controlP)
  673. PACE_ADD32(newLabel)
  674. PACE_END(sysTrapCtlSetLabel,NONE,NONE)
  675. PACE_BEGIN(void EvtEnableGraffiti(Boolean enable))
  676. PACE_ADD8(enable)
  677. PACE_END(sysTrapEvtEnableGraffiti,NONE,NONE);
  678. PACE_BEGIN(Err EvtResetAutoOffTimer())
  679. PACE_END16VOID(sysTrapEvtResetAutoOffTimer,NONE,NONE)
  680. PACE_BEGIN(FormType *FrmGetFirstForm())
  681. PACE_ENDPTRVOID(sysTrapFrmGetFirstForm,NONE,NONE)
  682. PACE_BEGIN(void *FrmGetObjectPtr (const FormType *formP, UInt16 objIndex))
  683. PACE_ADD32(formP)
  684. PACE_ADD16(objIndex)
  685. PACE_ENDPTR(sysTrapFrmGetObjectPtr,NONE,NONE)
  686. #if defined(_M_IX86)
  687. // simulator freezes many times. bypassing...
  688. Boolean EvtEventAvail() { return 1; }
  689. #else
  690. PACE_BEGIN(Boolean EvtEventAvail())
  691. PACE_END8VOID(sysTrapEvtEventAvail,NONE,NONE)
  692. #endif
  693. PACE_BEGIN(void EvtGetPen(Int16 *pScreenX, Int16 *pScreenY, Boolean *pPenDown))
  694. PACE_ADD32(pScreenX)
  695. PACE_ADD32(pScreenY)
  696. PACE_ADD32(pPenDown)
  697. PACE_END(sysTrapEvtGetPen,NONE,PACE_DATA16(pScreenX) PACE_DATA16(pScreenY))
  698. PACE_BEGIN(Boolean EvtSysEventAvail(Boolean ignorePenUps))
  699. PACE_ADD8(ignorePenUps)
  700. PACE_END8(sysTrapEvtSysEventAvail,NONE,NONE)
  701. PACE_BEGINEVENT(void EvtAddUniqueEventToQueue(const EventType *eventP, UInt32 id,Boolean inPlace))
  702. PACE_ADD32(&ev)
  703. PACE_ADD32(id)
  704. PACE_ADD8(inPlace)
  705. PACE_END(sysTrapEvtAddUniqueEventToQueue,Event_ARM_To_M68K(eventP,ev),NONE)
  706. PACE_BEGINEVENT(void EvtGetEvent(EventType *event, Int32 timeout))
  707. PACE_ADD32(&ev)
  708. PACE_ADD32(timeout)
  709. PACE_END(sysTrapEvtGetEvent,NONE,Event_M68K_To_ARM(ev,event))
  710. PACE_BEGIN(UInt16 FrmGetObjectIndex (const FormType *formP, UInt16 objID))
  711. PACE_ADD32(formP)
  712. PACE_ADD16(objID)
  713. PACE_END16(sysTrapFrmGetObjectIndex,NONE,NONE)
  714. PACE_BEGIN(void CtlSetSliderValues(ControlType *ctlP, const UInt16 *minValueP, const UInt16 *maxValueP,
  715.    const UInt16 *pageSizeP, const UInt16 *valueP))
  716. PACE_ADD32(ctlP)
  717. PACE_ADD32(minValueP)
  718. PACE_ADD32(maxValueP)
  719. PACE_ADD32(pageSizeP)
  720. PACE_ADD32(valueP)
  721. PACE_END(sysTrapCtlSetSliderValues,PACE_CDATA16((UInt16*)minValueP) PACE_CDATA16((UInt16*)maxValueP) PACE_CDATA16((UInt16*)pageSizeP) PACE_CDATA16((UInt16*)valueP),
  722.    PACE_CDATA16((UInt16*)minValueP) PACE_CDATA16((UInt16*)maxValueP) PACE_CDATA16((UInt16*)pageSizeP) PACE_CDATA16((UInt16*)valueP))
  723.    // possible problem overriding const input
  724. PACE_BEGIN(WinHandle WinSetDrawWindow(WinHandle winHandle))
  725. PACE_ADD32(winHandle)
  726. PACE_ENDPTR(sysTrapWinSetDrawWindow,NONE,NONE)
  727. PACE_BEGIN(WinHandle WinGetDrawWindow())
  728. PACE_ENDPTRVOID(sysTrapWinGetDrawWindow,NONE,NONE)
  729. PACE_BEGIN(void WinDrawLine (Coord x1, Coord y1, Coord x2, Coord y2))
  730. PACE_ADD16(x1)
  731. PACE_ADD16(y1)
  732. PACE_ADD16(x2)
  733. PACE_ADD16(y2)
  734. PACE_END(sysTrapWinDrawLine,NONE,NONE)
  735. PACE_BEGIN(IndexedColorType UIColorGetTableEntryIndex(UIColorTableEntries which))
  736. PACE_ADD8(which)
  737. PACE_END8(sysTrapUIColorGetTableEntryIndex,NONE,NONE)
  738. PACE_BEGIN(IndexedColorType WinSetForeColor (IndexedColorType foreColor))
  739. PACE_ADD8(foreColor)
  740. PACE_END8(sysTrapWinSetForeColor,NONE,NONE)
  741. PACE_BEGIN(IndexedColorType WinSetBackColor (IndexedColorType backColor))
  742. PACE_ADD8(backColor)
  743. PACE_END8(sysTrapWinSetBackColor,NONE,NONE)
  744. PACE_BEGIN(IndexedColorType WinSetTextColor (IndexedColorType textColor))
  745. PACE_ADD8(textColor)
  746. PACE_END8(sysTrapWinSetTextColor,NONE,NONE)
  747. PACE_BEGIN(UInt16 FrmDoDialog (FormType *formP))
  748. PACE_ADD32(formP)
  749. PACE_END16(sysTrapFrmDoDialog,NONE,NONE)
  750. PACE_BEGIN(UInt16 FrmGetFormId (const FormType *formP))
  751. PACE_ADD32(formP)
  752. PACE_END16(sysTrapFrmGetFormId,NONE,NONE)
  753. PACE_BEGIN(void FrmPopupForm (UInt16 formId))
  754. PACE_ADD16(formId)
  755. PACE_END(sysTrapFrmPopupForm,NONE,NONE)
  756. PACE_BEGIN(void FrmDrawForm (FormType *formP))
  757. PACE_ADD32(formP)
  758. PACE_END(sysTrapFrmDrawForm,NONE,NONE)
  759. PACE_BEGIN(void FrmEraseForm (FormType *formP))
  760. PACE_ADD32(formP)
  761. PACE_END(sysTrapFrmEraseForm,NONE,NONE)
  762. PACE_BEGIN(Boolean MenuHideItem(UInt16 id))
  763. PACE_ADD16(id)
  764. PACE_END8(sysTrapMenuHideItem,NONE,NONE)
  765. PACE_BEGINEVENT(Boolean MenuHandleEvent(MenuBarType *menuP, EventType *event, UInt16 *error))
  766. PACE_ADD32(menuP)
  767. PACE_ADD32(&ev)
  768. PACE_ADD32(error)
  769. PACE_END8(sysTrapMenuHandleEvent,Event_ARM_To_M68K(event,ev),PACE_DATA16(error))
  770. PACE_BEGIN(Err SysNotifyRegister(UInt16 cardNo, LocalID dbID, UInt32 notifyType, 
  771.  SysNotifyProcPtr callbackP, Int8 priority, void *userDataP))
  772. PACE_ADD16(cardNo)
  773. PACE_ADD32(dbID)
  774. PACE_ADD32(notifyType)
  775. PACE_ADD32(callbackP)
  776. PACE_ADD8(priority)
  777. PACE_ADD32(userDataP)
  778. PACE_END16(sysTrapSysNotifyRegister,NONE,NONE)
  779. PACE_BEGIN(Boolean FrmVisible(const FormType *formP))
  780. PACE_ADD32(formP)
  781. PACE_END8(sysTrapFrmVisible,NONE,NONE)
  782. PACE_BEGIN(void FrmSetActiveForm(FormType *formP))
  783. PACE_ADD32(formP)
  784. PACE_END(sysTrapFrmSetActiveForm,NONE,NONE)
  785. PACE_BEGIN(FormType* FrmInitForm(UInt16 rscID))
  786. PACE_ADD16(rscID)
  787. PACE_ENDPTR(sysTrapFrmInitForm,NONE,NONE)
  788. PACE_BEGIN(WinHandle FrmGetWindowHandle(const FormType *formP))
  789. PACE_ADD32(formP)
  790. PACE_ENDPTR(sysTrapFrmGetWindowHandle,NONE,NONE);
  791. PACE_BEGIN(Err SysNotifyUnregister(UInt16 cardNo, LocalID dbID, UInt32 notifyType, Int8 priority))
  792. PACE_ADD16(cardNo)
  793. PACE_ADD32(dbID)
  794. PACE_ADD32(notifyType)
  795. PACE_ADD8(priority)
  796. PACE_END16(sysTrapSysNotifyUnregister,NONE,NONE)
  797. PACE_BEGIN(Err SysCurAppDatabase(UInt16 *cardNoP, LocalID *dbIDP))
  798. PACE_ADD32(cardNoP)
  799. PACE_ADD32(dbIDP)
  800. PACE_END16(sysTrapSysCurAppDatabase,NONE,PACE_DATA16(cardNoP) PACE_DATA32(dbIDP))
  801. PACE_BEGIN(Err WinSetConstraintsSize(WinHandle winH, Coord minH, Coord prefH, Coord maxH,
  802. Coord minW, Coord prefW, Coord maxW))
  803. PACE_ADD32(winH)
  804. PACE_ADD16(minH)
  805. PACE_ADD16(prefH)
  806. PACE_ADD16(maxH)
  807. PACE_ADD16(minW)
  808. PACE_ADD16(prefW)
  809. PACE_ADD16(maxW)
  810. PACE_END16(sysTrapPinsDispatch,PACE_SEL(pinWinSetConstraintsSize),NONE)
  811. PACE_BEGIN(Err SysSetOrientation(UInt16 orientation))
  812. PACE_ADD16(orientation)
  813. PACE_END16(sysTrapPinsDispatch,PACE_SEL(pinSysSetOrientation),NONE)
  814. PACE_BEGIN(UInt16 PINGetInputAreaState())
  815. PACE_END16VOID(sysTrapPinsDispatch,PACE_SEL(pinPINGetInputAreaState),NONE)
  816. PACE_BEGIN(Err PINSetInputTriggerState(UInt16 state))
  817. PACE_ADD16(state)
  818. PACE_END16(sysTrapPinsDispatch,PACE_SEL(pinPINSetInputTriggerState),NONE)
  819. PACE_BEGIN(Err FrmSetDIAPolicyAttr (FormPtr formP, UInt16 diaPolicy))
  820. PACE_ADD32(formP)
  821. PACE_ADD16(diaPolicy)
  822. PACE_END16(sysTrapPinsDispatch,PACE_SEL(pinFrmSetDIAPolicyAttr),NONE)
  823. PACE_BEGIN(Err PINSetInputAreaState(UInt16 state))
  824. PACE_ADD16(state)
  825. PACE_END16(sysTrapPinsDispatch,PACE_SEL(pinPINSetInputAreaState),NONE)
  826. PACE_BEGIN(Err SysSetOrientationTriggerState(UInt16 triggerState))
  827. PACE_ADD16(triggerState)
  828. PACE_END16(sysTrapPinsDispatch,PACE_SEL(pinSysSetOrientationTriggerState),NONE)
  829. PACE_BEGIN(Err StatGetAttribute(UInt16 selector, UInt32* dataP))
  830. PACE_ADD16(selector)
  831. PACE_ADD32(dataP)
  832. PACE_END16(sysTrapPinsDispatch,PACE_SEL(pinStatGetAttribute),PACE_DATA32(dataP))
  833. PACE_BEGIN(Err StatHide())
  834. PACE_END16VOID(sysTrapPinsDispatch,PACE_SEL(pinStatHide),NONE)
  835. PACE_BEGIN(Err StatShow())
  836. PACE_END16VOID(sysTrapPinsDispatch,PACE_SEL(pinStatShow),NONE)
  837. PACE_BEGIN(UInt16 SysSetAutoOffTime(UInt16 seconds))
  838. PACE_ADD16(seconds)
  839. PACE_END16(sysTrapSysSetAutoOffTime,NONE,NONE);
  840. PACE_BEGIN(Err SysTaskDelay(Int32 delay))
  841. PACE_ADD32(delay)
  842. PACE_END16(sysTrapSysTaskDelay,NONE,NONE);
  843. PACE_BEGIN(UInt16 SysTicksPerSecond())
  844. PACE_END16VOID(sysTrapSysTicksPerSecond,NONE,NONE)
  845. PACE_BEGIN(UInt32 TimGetTicks())
  846. PACE_END32VOID(sysTrapTimGetTicks,NONE,NONE)
  847. PACE_BEGIN(MemPtr MemPtrNew(UInt32 n))
  848. PACE_ADD32(n)
  849. PACE_ENDPTR(sysTrapMemPtrNew,NONE,NONE)
  850. PACE_BEGIN(Err MemChunkFree(MemPtr p))
  851. PACE_ADD32(p)
  852. PACE_END16(sysTrapMemChunkFree,NONE,NONE)
  853. PACE_BEGIN(UInt32 MemPtrSize(MemPtr p))
  854. PACE_ADD32(p)
  855. PACE_END32(sysTrapMemPtrSize,NONE,NONE)
  856. PACE_BEGIN(Err MemPtrResize(MemPtr p,UInt32 n))
  857. PACE_ADD32(p)
  858. PACE_ADD32(n)
  859. PACE_END16(sysTrapMemPtrResize,NONE,NONE)
  860. PACE_BEGIN(Err MemHeapFreeBytes(UInt16 heapID,UInt32* freeP,UInt32* maxP))
  861. PACE_ADD16(heapID)
  862. PACE_ADD32(freeP)
  863. PACE_ADD32(maxP)
  864. PACE_END16(sysTrapMemHeapFreeBytes,NONE,PACE_DATA32(freeP) PACE_DATA32(maxP))
  865. PACE_BEGIN(UInt16 MemHeapID(UInt16 cardNo, UInt16 heapIndex))
  866. PACE_ADD16(cardNo)
  867. PACE_ADD16(heapIndex)
  868. PACE_END16(sysTrapMemHeapID,NONE,NONE)
  869. PACE_BEGIN(Err MemHeapCheck(UInt16 heapID))
  870. PACE_ADD16(heapID)
  871. PACE_END16(sysTrapMemHeapCheck,NONE,NONE)
  872. PACE_BEGIN(UInt32 PrefGetPreference(SystemPreferencesChoice choice))
  873. PACE_ADD8(choice)
  874. PACE_END32(sysTrapPrefGetPreference,NONE,NONE)
  875. PACE_BEGIN(Int16 PrefGetAppPreferences (UInt32 creator, UInt16 id, void *prefs, 
  876. UInt16 *prefsSize, Boolean saved))
  877. PACE_ADD32(creator)
  878. PACE_ADD16(id)
  879. PACE_ADD32(prefs)
  880. PACE_ADD32(prefsSize)
  881. PACE_ADD8(saved)
  882. PACE_END16(sysTrapPrefGetAppPreferences,PACE_DATA16(prefsSize),PACE_DATA16(prefsSize))
  883. PACE_BEGIN(void PrefSetAppPreferences (UInt32 creator, UInt16 id, Int16 version, const void *prefs, 
  884. UInt16 prefsSize, Boolean saved))
  885. PACE_ADD32(creator)
  886. PACE_ADD16(id)
  887. PACE_ADD16(version)
  888. PACE_ADD32(prefs)
  889. PACE_ADD16(prefsSize)
  890. PACE_ADD8(saved)
  891. PACE_END(sysTrapPrefSetAppPreferences,NONE,NONE)
  892. PACE_BEGIN(UInt16 FrmCustomAlert(UInt16 alertId,const Char *s1,const Char *s2,const Char *s3))
  893. PACE_ADD16(alertId)
  894. PACE_ADD32(s1)
  895. PACE_ADD32(s2)
  896. PACE_ADD32(s3)
  897. PACE_END16(sysTrapFrmCustomAlert,NONE,NONE)
  898. PACE_BEGIN(void FrmGetObjectBounds (const FormType *formP, UInt16 objIndex,RectangleType *rP))
  899. PACE_ADD32(formP)
  900. PACE_ADD16(objIndex)
  901. PACE_ADD32(rP)
  902. PACE_END(sysTrapFrmGetObjectBounds,NONE,SwapStruct(rP,2,2,2,2,0))
  903. PACE_BEGIN(void WinGetDisplayExtent (Coord *extentX, Coord *extentY))
  904. PACE_ADD32(extentX)
  905. PACE_ADD32(extentY)
  906. PACE_END(sysTrapWinGetDisplayExtent,NONE,PACE_DATA16(extentX) PACE_DATA16(extentY))
  907. PACE_BEGIN(void WinGetBounds(WinHandle winH, RectangleType *rP))
  908. PACE_ADD32(winH)
  909. PACE_ADD32(rP)
  910. PACE_END(sysTrapWinGetBounds,NONE,SwapStruct(rP,2,2,2,2,0))
  911. PACE_BEGINEX(void WinSetBounds (WinHandle winHandle, const RectangleType *rP),r)
  912. PACE_ADD16(rP->topLeft.x)
  913. PACE_ADD16(rP->topLeft.y)
  914. PACE_ADD16(rP->extent.x)
  915. PACE_ADD16(rP->extent.y)
  916. PACE_VAR(PACE_PARAM)
  917. PACE_ADD32(winHandle)
  918. PACE_ADD32(r)
  919. PACE_END(sysTrapWinSetBounds,NONE,NONE)
  920. PACE_BEGINEX(void FrmSetObjectBounds (FormType *formP, UInt16 objIndex,const RectangleType *bounds),r)
  921. PACE_ADD16(bounds->topLeft.x)
  922. PACE_ADD16(bounds->topLeft.y)
  923. PACE_ADD16(bounds->extent.x)
  924. PACE_ADD16(bounds->extent.y)
  925. PACE_VAR(PACE_PARAM)
  926. PACE_ADD32(formP)
  927. PACE_ADD16(objIndex)
  928. PACE_ADD32(r)
  929. PACE_END(sysTrapFrmSetObjectBounds,NONE,NONE)
  930. PACE_BEGINEX(void WinDrawRectangle (const RectangleType *rP, UInt16 cornerDiam),r)
  931. PACE_ADD16(rP->topLeft.x)
  932. PACE_ADD16(rP->topLeft.y)
  933. PACE_ADD16(rP->extent.x)
  934. PACE_ADD16(rP->extent.y)
  935. PACE_VAR(PACE_PARAM)
  936. PACE_ADD32(r)
  937. PACE_ADD16(cornerDiam)
  938. PACE_END(sysTrapWinDrawRectangle,NONE,NONE)
  939. PACE_BEGIN(void WinDrawBitmap (BitmapPtr bitmapP, Coord x, Coord y))
  940. PACE_ADD32(bitmapP)
  941. PACE_ADD16(x)
  942. PACE_ADD16(y)
  943. PACE_END(sysTrapWinDrawBitmap,NONE,NONE)
  944. PACE_BEGINEX(void WinEraseRectangle(const RectangleType *rP, UInt16 cornerDiam),r)
  945. PACE_ADD16(rP->topLeft.x)
  946. PACE_ADD16(rP->topLeft.y)
  947. PACE_ADD16(rP->extent.x)
  948. PACE_ADD16(rP->extent.y)
  949. PACE_VAR(PACE_PARAM)
  950. PACE_ADD32(r)
  951. PACE_ADD16(cornerDiam)
  952. PACE_END(sysTrapWinEraseRectangle,NONE,NONE)
  953. PACE_BEGIN(void WinDrawChars(const Char *chars, Int16 len, Coord x, Coord y))
  954. PACE_ADD32(chars)
  955. PACE_ADD16(len)
  956. PACE_ADD16(x)
  957. PACE_ADD16(y)
  958. PACE_END(sysTrapWinDrawChars,NONE,NONE)
  959. PACE_BEGIN(SysAppInfoPtr SysGetAppInfo(SysAppInfoPtr *uiAppPP, SysAppInfoPtr* actionCodeAppPP))
  960. PACE_ADD32(uiAppPP)
  961. PACE_ADD32(actionCodeAppPP)
  962. PACE_ENDPTR(sysTrapSysGetAppInfo,NONE,NONE) 
  963. PACE_BEGIN(MemPtr MemChunkNew(UInt16 heapID, UInt32 size, UInt16 attr))
  964. PACE_ADD16(heapID)
  965. PACE_ADD32(size)
  966. PACE_ADD16(attr)
  967. PACE_ENDPTR(sysTrapMemChunkNew,NONE,NONE)
  968. PACE_BEGIN(Err VFSVolumeEnumerate(UInt16 *volRefNumP, UInt32 *volIteratorP))
  969. PACE_ADD32(volRefNumP)
  970. PACE_ADD32(volIteratorP)
  971. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapVolumeEnumerate) PACE_DATA32(volIteratorP),PACE_DATA16(volRefNumP) PACE_DATA32(volIteratorP))
  972. PACE_BEGIN(Err VFSVolumeGetLabel(UInt16 volRefNum, Char *labelP, UInt16 bufLen))
  973. PACE_ADD16(volRefNum)
  974. PACE_ADD32(labelP)
  975. PACE_ADD16(bufLen)
  976. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapVolumeGetLabel),NONE)
  977. PACE_BEGIN(Err VFSVolumeInfo(UInt16 volRefNum, VolumeInfoType *volInfoP))
  978. PACE_ADD16(volRefNum)
  979. PACE_ADD32(volInfoP)
  980. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapVolumeInfo),SwapStruct(volInfoP,4,4,4,4,2,2,4,4,0))
  981. PACE_BEGIN(Err FtrPtrFree(UInt32 creator, UInt16 featureNum))
  982. PACE_ADD32(creator)
  983. PACE_ADD16(featureNum)
  984. PACE_END16(sysTrapFtrPtrFree,NONE,NONE)
  985. PACE_BEGIN(Err FtrGet(UInt32 creator, UInt16 featureNum, UInt32 *valueP))
  986. PACE_ADD32(creator)
  987. PACE_ADD16(featureNum)
  988. PACE_ADD32(valueP)
  989. PACE_END16(sysTrapFtrGet,NONE,PACE_DATA32(valueP))
  990. PACE_BEGIN(Err FtrSet(UInt32 creator, UInt16 featureNum, UInt32 newValue))
  991. PACE_ADD32(creator)
  992. PACE_ADD16(featureNum)
  993. PACE_ADD32(newValue)
  994. PACE_END16(sysTrapFtrSet,NONE,NONE)
  995. PACE_BEGIN(Err FtrPtrNew(UInt32 creator, UInt16 featureNum, UInt32 size,void **newPtrP))
  996. PACE_ADD32(creator)
  997. PACE_ADD16(featureNum)
  998. PACE_ADD32(size)
  999. PACE_ADD32(newPtrP)
  1000. PACE_END16(sysTrapFtrPtrNew,NONE,PACE_DATA32((UInt32*)newPtrP))
  1001. PACE_BEGIN(Err DmWrite(void *recordP, UInt32 offset, const void *srcP, UInt32 bytes))
  1002. PACE_ADD32(recordP)
  1003. PACE_ADD32(offset)
  1004. PACE_ADD32(srcP)
  1005. PACE_ADD32(bytes)
  1006. PACE_END16(sysTrapDmWrite,NONE,NONE)
  1007. PACE_BEGIN(MemHandle DmGetResource(DmResType type, DmResID resID))
  1008. PACE_ADD32(type)
  1009. PACE_ADD16(resID)
  1010. PACE_ENDPTR(sysTrapDmGetResource,NONE,NONE)
  1011. PACE_BEGIN(Err DmReleaseResource(MemHandle resourceH))
  1012. PACE_ADD32(resourceH)
  1013. PACE_END16(sysTrapDmReleaseResource,NONE,NONE)
  1014. PACE_BEGIN(UInt32 MemHandleSize(MemHandle h))
  1015. PACE_ADD32(h)
  1016. PACE_END32(sysTrapMemHandleSize,NONE,NONE)
  1017. PACE_BEGIN(MemPtr MemHandleLock(MemHandle h))
  1018. PACE_ADD32(h)
  1019. PACE_ENDPTR(sysTrapMemHandleLock,NONE,NONE)
  1020. PACE_BEGIN(Err MemHandleUnlock(MemHandle h))
  1021. PACE_ADD32(h)
  1022. PACE_END16(sysTrapMemHandleUnlock,NONE,NONE)
  1023. PACE_BEGIN(Err MemPtrUnlock(MemPtr h))
  1024. PACE_ADD32(h)
  1025. PACE_END16(sysTrapMemPtrUnlock,NONE,NONE)
  1026. PACE_BEGIN(Err DmGetNextDatabaseByTypeCreator(Boolean newSearch, DmSearchStatePtr stateInfoP,
  1027.   UInt32 type, UInt32 creator, Boolean onlyLatestVers, 
  1028.   UInt16 *cardNoP, LocalID *dbIDP))
  1029. PACE_ADD8(newSearch)
  1030. PACE_ADD32(stateInfoP)
  1031. PACE_ADD32(type)
  1032. PACE_ADD32(creator)
  1033. PACE_ADD8(onlyLatestVers)
  1034. PACE_ADD32(cardNoP)
  1035. PACE_ADD32(dbIDP)
  1036. PACE_END16(sysTrapDmGetNextDatabaseByTypeCreator,PACE_DATA32(dbIDP),PACE_DATA16(cardNoP) PACE_DATA32(dbIDP))
  1037. PACE_BEGIN(Err DmDatabaseSize(UInt16 cardNo, LocalID dbID, UInt32 *numRecordsP,
  1038. UInt32 *totalBytesP, UInt32 *dataBytesP))
  1039. PACE_ADD16(cardNo)
  1040. PACE_ADD32(dbID)
  1041. PACE_ADD32(numRecordsP)
  1042. PACE_ADD32(totalBytesP)
  1043. PACE_ADD32(dataBytesP)
  1044. PACE_END16(sysTrapDmDatabaseSize,NONE,
  1045.    PACE_CDATA32(numRecordsP)
  1046.    PACE_CDATA32(totalBytesP)
  1047.    PACE_CDATA32(dataBytesP))
  1048. PACE_BEGIN(DmOpenRef DmOpenDatabaseByTypeCreator(UInt32 type, UInt32 creator, UInt16 mode))
  1049. PACE_ADD32(type)
  1050. PACE_ADD32(creator)
  1051. PACE_ADD16(mode)
  1052. PACE_ENDPTR(sysTrapDmOpenDatabaseByTypeCreator,NONE,NONE)
  1053. PACE_BEGIN(Err DmCloseDatabase(DmOpenRef dbP))
  1054. PACE_ADD32(dbP)
  1055. PACE_END16(sysTrapDmCloseDatabase,NONE,NONE)
  1056. PACE_BEGIN(Err DmDeleteDatabase(UInt16 cardNo, LocalID dbID))
  1057. PACE_ADD16(cardNo)
  1058. PACE_ADD32(dbID)
  1059. PACE_END16(sysTrapDmDeleteDatabase,NONE,NONE)
  1060. PACE_BEGIN(Err DmSetDatabaseInfo(UInt16 cardNo, LocalID dbID, const Char *nameP,
  1061. UInt16 *attributesP, UInt16 *versionP, UInt32 *crDateP,
  1062. UInt32 * modDateP, UInt32 *bckUpDateP,
  1063. UInt32 * modNumP, LocalID *appInfoIDP,
  1064. LocalID *sortInfoIDP, UInt32 *typeP,
  1065. UInt32 *creatorP))
  1066. PACE_ADD16(cardNo)
  1067. PACE_ADD32(dbID)
  1068. PACE_ADD32(nameP)
  1069. PACE_ADD32(attributesP)
  1070. PACE_ADD32(versionP)
  1071. PACE_ADD32(crDateP)
  1072. PACE_ADD32(modDateP)
  1073. PACE_ADD32(bckUpDateP)
  1074. PACE_ADD32(modNumP)
  1075. PACE_ADD32(appInfoIDP)
  1076. PACE_ADD32(sortInfoIDP)
  1077. PACE_ADD32(typeP)
  1078. PACE_ADD32(creatorP)
  1079. PACE_END16(sysTrapDmSetDatabaseInfo,
  1080. PACE_CDATA16(attributesP) 
  1081. PACE_CDATA16(versionP) 
  1082. PACE_CDATA32(crDateP) 
  1083. PACE_CDATA32(modDateP) 
  1084. PACE_CDATA32(bckUpDateP) 
  1085. PACE_CDATA32(modNumP) 
  1086. PACE_CDATA32(appInfoIDP) 
  1087. PACE_CDATA32(sortInfoIDP) 
  1088. PACE_CDATA32(typeP) 
  1089. PACE_CDATA32(creatorP),
  1090. PACE_CDATA16(attributesP) 
  1091. PACE_CDATA16(versionP) 
  1092. PACE_CDATA32(crDateP) 
  1093. PACE_CDATA32(modDateP) 
  1094. PACE_CDATA32(bckUpDateP) 
  1095. PACE_CDATA32(modNumP) 
  1096. PACE_CDATA32(appInfoIDP) 
  1097. PACE_CDATA32(sortInfoIDP) 
  1098. PACE_CDATA32(typeP) 
  1099. PACE_CDATA32(creatorP))
  1100. PACE_BEGIN(Err DmDatabaseInfo(UInt16 cardNo, LocalID dbID, Char *nameP,
  1101. UInt16 *attributesP, UInt16 *versionP, UInt32 *crDateP,
  1102. UInt32 *modDateP, UInt32 *bckUpDateP,
  1103. UInt32 *modNumP, LocalID *appInfoIDP,
  1104. LocalID *sortInfoIDP, UInt32 *typeP,
  1105. UInt32 *creatorP))
  1106. PACE_ADD16(cardNo)
  1107. PACE_ADD32(dbID)
  1108. PACE_ADD32(nameP)
  1109. PACE_ADD32(attributesP)
  1110. PACE_ADD32(versionP)
  1111. PACE_ADD32(crDateP)
  1112. PACE_ADD32(modDateP)
  1113. PACE_ADD32(bckUpDateP)
  1114. PACE_ADD32(modNumP)
  1115. PACE_ADD32(appInfoIDP)
  1116. PACE_ADD32(sortInfoIDP)
  1117. PACE_ADD32(typeP)
  1118. PACE_ADD32(creatorP)
  1119. PACE_END16(sysTrapDmDatabaseInfo,NONE,
  1120. PACE_CDATA16(attributesP) 
  1121. PACE_CDATA16(versionP) 
  1122. PACE_CDATA32(crDateP) 
  1123. PACE_CDATA32(modDateP) 
  1124. PACE_CDATA32(bckUpDateP) 
  1125. PACE_CDATA32(modNumP) 
  1126. PACE_CDATA32(appInfoIDP) 
  1127. PACE_CDATA32(sortInfoIDP) 
  1128. PACE_CDATA32(typeP) 
  1129. PACE_CDATA32(creatorP))
  1130. PACE_BEGIN(FileHand FileOpen(UInt16 cardNo, const Char * nameP, UInt32 type, UInt32 creator,
  1131. UInt32 openMode, Err *errP))
  1132. PACE_ADD16(cardNo)
  1133. PACE_ADD32(nameP)
  1134. PACE_ADD32(type)
  1135. PACE_ADD32(creator)
  1136. PACE_ADD32(openMode)
  1137. PACE_ADD32(errP)
  1138. PACE_ENDPTR(sysTrapFileOpen,NONE,PACE_CDATA16(errP))
  1139. PACE_BEGIN(Err FileClose(FileHand stream))
  1140. PACE_ADD32(stream)
  1141. PACE_END16(sysTrapFileClose,NONE,NONE)
  1142. PACE_BEGIN(Int32 FileReadLow(FileHand stream, void *baseP, Int32 offset, Boolean dataStoreBased, Int32 objSize,
  1143. Int32 numObj, Err *errP))
  1144. PACE_ADD32(stream)
  1145. PACE_ADD32(baseP)
  1146. PACE_ADD32(offset)
  1147. PACE_ADD8(dataStoreBased)
  1148. PACE_ADD32(objSize)
  1149. PACE_ADD32(numObj)
  1150. PACE_ADD32(errP)
  1151. PACE_END32(sysTrapFileReadLow,NONE,PACE_CDATA16(errP))
  1152. PACE_BEGIN(Err FileSeek(FileHand stream, Int32 offset, FileOriginEnum origin))
  1153. PACE_ADD32(stream)
  1154. PACE_ADD32(offset)
  1155. PACE_ADD8(origin)
  1156. PACE_END16(sysTrapFileSeek,NONE,NONE)
  1157. PACE_BEGIN(Int32 FileTell(FileHand stream, Int32 *fileSizeP, Err *errP))
  1158. PACE_ADD32(stream)
  1159. PACE_ADD32(fileSizeP)
  1160. PACE_ADD32(errP)
  1161. PACE_END32(sysTrapFileTell,NONE,PACE_CDATA32(fileSizeP) PACE_CDATA16(errP))
  1162. PACE_BEGIN(void WinGetClip(RectangleType *rP))
  1163. PACE_ADD32(rP)
  1164. PACE_END(sysTrapWinGetClip,NONE,SwapStruct(rP,2,2,2,2,0))
  1165. PACE_BEGINEX(void WinSetClip (const RectangleType *rP),r)
  1166. PACE_ADD16(rP->topLeft.x)
  1167. PACE_ADD16(rP->topLeft.y)
  1168. PACE_ADD16(rP->extent.x)
  1169. PACE_ADD16(rP->extent.y)
  1170. PACE_VAR(PACE_PARAM)
  1171. PACE_ADD32(r)
  1172. PACE_END(sysTrapWinSetClip,NONE,NONE)
  1173. PACE_BEGIN(void WinPushDrawState())
  1174. PACE_ENDVOID(sysTrapWinPushDrawState,NONE,NONE)
  1175. PACE_BEGIN(void WinPopDrawState())
  1176. PACE_ENDVOID(sysTrapWinPopDrawState,NONE,NONE)
  1177. PACE_BEGIN(void SclSetScrollBar (ScrollBarType *bar, Int16 value, Int16 min, Int16 max, Int16 pageSize))
  1178. PACE_ADD32(bar)
  1179. PACE_ADD16(value)
  1180. PACE_ADD16(min)
  1181. PACE_ADD16(max)
  1182. PACE_ADD16(pageSize)
  1183. PACE_END(sysTrapSclSetScrollBar,NONE,NONE)
  1184. PACE_BEGIN(UInt16 WinSetCoordinateSystem(UInt16 coordSys))
  1185. PACE_ADD16(coordSys)
  1186. PACE_END16(sysTrapHighDensityDispatch,PACE_SEL(HDSelectorWinSetCoordinateSystem),NONE)
  1187. PACE_BEGIN(Coord WinScaleCoord(Coord coord, Boolean ceiling))
  1188. PACE_ADD16(coord)
  1189. PACE_ADD8(ceiling)
  1190. PACE_END16(sysTrapHighDensityDispatch,PACE_SEL(HDSelectorWinScaleCoord),NONE)
  1191. PACE_BEGIN(UInt16 WinGetCoordinateSystem())
  1192. PACE_END16VOID(sysTrapHighDensityDispatch,PACE_SEL(HDSelectorWinGetCoordinateSystem),NONE)
  1193. PACE_BEGIN(Err WinScreenGetAttribute(WinScreenAttrType selector, UInt32* attrP))
  1194. PACE_ADD8(selector)
  1195. PACE_ADD32(attrP)
  1196. PACE_END16(sysTrapHighDensityDispatch,PACE_SEL(HDSelectorWinScreenGetAttribute),PACE_DATA32(attrP))
  1197. PACE_BEGIN(Err WinScreenMode(WinScreenModeOperation operation, 
  1198. UInt32 *widthP,
  1199. UInt32 *heightP, 
  1200. UInt32 *depthP, 
  1201. Boolean *enableColorP))
  1202. PACE_ADD8(operation)
  1203. PACE_ADD32(widthP)
  1204. PACE_ADD32(heightP)
  1205. PACE_ADD32(depthP)
  1206. PACE_ADD32(enableColorP)
  1207. PACE_END16(sysTrapWinScreenMode,PACE_CDATA32(widthP) PACE_CDATA32(heightP) PACE_CDATA32(depthP),
  1208. PACE_CDATA32(widthP) PACE_CDATA32(heightP) PACE_CDATA32(depthP))
  1209. PACE_BEGIN(Err WinPalette(UInt8 operation, Int16 startIndex, 
  1210.       UInt16 paletteEntries, RGBColorType *tableP))
  1211. PACE_ADD8(operation)
  1212. PACE_ADD16(startIndex)
  1213. PACE_ADD16(paletteEntries)
  1214. PACE_ADD32(tableP)
  1215. PACE_END16(sysTrapWinPalette,NONE,NONE)
  1216. PACE_BEGIN(WinHandle WinGetDisplayWindow())
  1217. PACE_ENDPTRVOID(sysTrapWinGetDisplayWindow,NONE,NONE)
  1218. PACE_BEGIN(WinHandle WinGetActiveWindow())
  1219. PACE_ENDPTRVOID(sysTrapWinGetActiveWindow,NONE,NONE)
  1220. PACE_BEGIN(BitmapType *WinGetBitmap(WinHandle winHandle))
  1221. PACE_ADD32(winHandle)
  1222. PACE_ENDPTR(sysTrapWinGetBitmap,NONE,NONE)
  1223. PACE_BEGIN(void BmpGetDimensions(const BitmapType * bitmapP,Coord *widthP,Coord *heightP,UInt16 *rowBytesP))
  1224. PACE_ADD32(bitmapP)
  1225. PACE_ADD32(widthP)
  1226. PACE_ADD32(heightP)
  1227. PACE_ADD32(rowBytesP)
  1228. PACE_END(sysTrapBmpGetDimensions,NONE,PACE_CDATA16(widthP) PACE_CDATA16(heightP) PACE_CDATA16(rowBytesP))
  1229. PACE_BEGIN(void* BmpGetBits(BitmapType * bitmapP))
  1230. PACE_ADD32(bitmapP)
  1231. PACE_ENDPTR(sysTrapBmpGetBits,NONE,NONE)
  1232. PACE_BEGIN(void WinSetBackColorRGB(const RGBColorType* newRgbP, RGBColorType* prevRgbP))
  1233. PACE_ADD32(newRgbP)
  1234. PACE_ADD32(prevRgbP)
  1235. PACE_END(sysTrapWinSetBackColorRGB,NONE,NONE)
  1236. PACE_BEGIN(Err VFSRegisterDefaultDirectory(const Char *fileTypeStr, UInt32 mediaType, 
  1237. const Char *pathStr))
  1238. PACE_ADD32(fileTypeStr)
  1239. PACE_ADD32(mediaType)
  1240. PACE_ADD32(pathStr)
  1241. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapRegisterDefaultDirectory),NONE)
  1242. PACE_BEGIN(Err VFSGetDefaultDirectory(UInt16 volRefNum, const Char *fileTypeStr,Char *pathStr, UInt16 *bufLenP))
  1243. PACE_ADD16(volRefNum)
  1244. PACE_ADD32(fileTypeStr)
  1245. PACE_ADD32(pathStr)
  1246. PACE_ADD32(bufLenP)
  1247. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapGetDefaultDirectory) PACE_DATA16(bufLenP),PACE_DATA16(bufLenP));
  1248. PACE_BEGIN(Err VFSImportDatabaseFromFile(UInt16 volRefNum, const Char *pathNameP, UInt16 *cardNoP, LocalID *dbIDP))
  1249. PACE_ADD16(volRefNum)
  1250. PACE_ADD32(pathNameP)
  1251. PACE_ADD32(cardNoP)
  1252. PACE_ADD32(dbIDP)
  1253. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapImportDatabaseFromFile),PACE_DATA16(cardNoP) PACE_DATA32(dbIDP))
  1254. PACE_BEGIN(Err VFSFileOpen(UInt16 volRefNum, const Char *pathNameP, UInt16 openMode, FileRef *fileRefP))
  1255. PACE_ADD16(volRefNum)
  1256. PACE_ADD32(pathNameP)
  1257. PACE_ADD16(openMode)
  1258. PACE_ADD32(fileRefP)
  1259. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileOpen),PACE_DATA32(fileRefP))
  1260. PACE_BEGIN(Err VFSFileClose(FileRef fileRef))
  1261. PACE_ADD32(fileRef)
  1262. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileClose),NONE)
  1263. PACE_BEGIN(Err VFSFileSize(FileRef fileRef,UInt32 *fileSizeP))
  1264. PACE_ADD32(fileRef)
  1265. PACE_ADD32(fileSizeP)
  1266. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileSize),PACE_DATA32(fileSizeP))
  1267. PACE_BEGIN(Err VFSFileGetDate(FileRef fileRef, UInt16 whichDate, UInt32 *dateP))
  1268. PACE_ADD32(fileRef)
  1269. PACE_ADD16(whichDate)
  1270. PACE_ADD32(dateP)
  1271. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileGetDate),PACE_DATA32(dateP))
  1272. PACE_BEGIN(Err VFSDirEntryEnumerate(FileRef dirRef,UInt32 *dirEntryIteratorP, FileInfoType *infoP))
  1273. PACE_ADD32(dirRef)
  1274. PACE_ADD32(dirEntryIteratorP)
  1275. PACE_ADD32(infoP)
  1276. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapDirEntryEnumerate) 
  1277.                          PACE_DATA32(dirEntryIteratorP)
  1278.  SwapStruct(infoP,4,4,2,0),
  1279.                          PACE_DATA32(dirEntryIteratorP)
  1280.  SwapStruct(infoP,4,4,2,0))
  1281. PACE_BEGIN(Err VFSFileGetAttributes(FileRef fileRef, UInt32 *attributesP))
  1282. PACE_ADD32(fileRef)
  1283. PACE_ADD32(attributesP)
  1284. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileGetAttributes),PACE_DATA32(attributesP))
  1285. PACE_BEGIN(Err VFSFileReadData(FileRef fileRef, UInt32 numBytes, void *bufBaseP, UInt32 offset, UInt32 *numBytesReadP))
  1286. PACE_ADD32(fileRef)
  1287. PACE_ADD32(numBytes)
  1288. PACE_ADD32(bufBaseP)
  1289. PACE_ADD32(offset)
  1290. PACE_ADD32(numBytesReadP)
  1291. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileReadData),PACE_CDATA32(numBytesReadP))
  1292. PACE_BEGIN(Err VFSFileRead(FileRef fileRef, UInt32 numBytes, void *bufP, UInt32 *numBytesReadP))
  1293. PACE_ADD32(fileRef)
  1294. PACE_ADD32(numBytes)
  1295. PACE_ADD32(bufP)
  1296. PACE_ADD32(numBytesReadP)
  1297. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileRead),PACE_CDATA32(numBytesReadP))
  1298. PACE_BEGIN(Err VFSFileWrite(FileRef fileRef, UInt32 numBytes, const void *dataP, UInt32 *numBytesWrittenP))
  1299. PACE_ADD32(fileRef)
  1300. PACE_ADD32(numBytes)
  1301. PACE_ADD32(dataP)
  1302. PACE_ADD32(numBytesWrittenP)
  1303. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileWrite),PACE_DATA32(numBytesWrittenP))
  1304. PACE_BEGIN(Err VFSFileSeek(FileRef fileRef, FileOrigin origin, Int32 offset))
  1305. PACE_ADD32(fileRef)
  1306. PACE_ADD16(origin)
  1307. PACE_ADD32(offset)
  1308. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileSeek),NONE)
  1309. PACE_BEGIN(Err VFSFileTell(FileRef fileRef,UInt32 *filePosP))
  1310. PACE_ADD32(fileRef)
  1311. PACE_ADD32(filePosP)
  1312. PACE_END16(sysTrapVFSMgr,PACE_SEL(vfsTrapFileTell),PACE_DATA32(filePosP))
  1313. PACE_BEGIN(UInt32 PceNativeCall(NativeFuncType *nativeFuncP, void *userDataP))
  1314. PACE_ADD32(nativeFuncP)
  1315. PACE_ADD32(userDataP)
  1316. PACE_END32(sysTrapPceNativeCall,NONE,NONE)
  1317. PACE_BEGIN(UInt8 *WinScreenLock(WinLockInitType initMode))
  1318. PACE_ADD8(initMode)
  1319. PACE_ENDPTR(sysTrapWinScreenLock,NONE,NONE)
  1320. PACE_BEGIN(void WinScreenUnlock())
  1321. PACE_ENDVOID(sysTrapWinScreenUnlock,NONE,NONE)
  1322. PACE_BEGIN(void LstSetHeight (ListType *listP, Int16 visibleItems))
  1323. PACE_ADD32(listP)
  1324. PACE_ADD16(visibleItems)
  1325. PACE_END(sysTrapLstSetHeight,NONE,NONE);
  1326. PACE_BEGIN(void LstSetListChoices (ListType *listP, Char **itemsText, Int16 numItems))
  1327. PACE_ADD32(listP)
  1328. PACE_ADD32(itemsText)
  1329. PACE_ADD16(numItems)
  1330. PACE_END(sysTrapLstSetListChoices,SwapBlock32(itemsText,numItems),NONE)
  1331. PACE_BEGIN(void LstSetSelection(ListType *listP, Int16 itemNum))
  1332. PACE_ADD32(listP)
  1333. PACE_ADD16(itemNum)
  1334. PACE_END(sysTrapLstSetSelection,NONE,NONE)
  1335. PACE_BEGIN(Char* LstGetSelectionText(const ListType *listP, Int16 itemNum))
  1336. PACE_ADD32(listP)
  1337. PACE_ADD16(itemNum)
  1338. PACE_ENDPTR(sysTrapLstGetSelectionText,NONE,NONE)
  1339. PACE_BEGIN(MemHandle MemHandleNew(UInt32 size))
  1340. PACE_ADD32(size)
  1341. PACE_ENDPTR(sysTrapMemHandleNew,NONE,NONE)
  1342. PACE_BEGIN(Err MemHandleFree(MemHandle h))
  1343. PACE_ADD32(h)
  1344. PACE_END16(sysTrapMemHandleFree,NONE,NONE)
  1345. PACE_BEGIN(Char* FldGetTextPtr(const FieldType *fldP))
  1346. PACE_ADD32(fldP)
  1347. PACE_ENDPTR(sysTrapFldGetTextPtr,NONE,NONE)
  1348. PACE_BEGIN(void FldSetTextHandle(FieldType *fldP, MemHandle textHandle))
  1349. PACE_ADD32(fldP)
  1350. PACE_ADD32(textHandle)
  1351. PACE_END(sysTrapFldSetTextHandle,NONE,NONE)
  1352. PACE_BEGIN(MemHandle FldGetTextHandle(const FieldType *fldP))
  1353. PACE_ADD32(fldP)
  1354. PACE_ENDPTR(sysTrapFldGetTextHandle,NONE,NONE)
  1355. PACE_BEGIN(void SndPlaySystemSound(SndSysBeepType beepID))
  1356. PACE_ADD8(beepID)
  1357. PACE_END(sysTrapSndPlaySystemSound,NONE,NONE)
  1358. PACE_BEGIN(Err SndStreamCreate(SndStreamRef *channel,SndStreamMode mode,UInt32 samplerate,
  1359. SndSampleType type,SndStreamWidth width,SndStreamBufferCallback func,
  1360. void *userdata,UInt32 buffsize,Boolean armNative))
  1361. PACE_ADD32(channel)
  1362. PACE_ADD8(mode)
  1363. PACE_ADD32(samplerate)
  1364. PACE_ADD16(type)
  1365. PACE_ADD8(width)
  1366. PACE_ADD32(func)
  1367. PACE_ADD32(userdata)
  1368. PACE_ADD32(buffsize)
  1369. PACE_ADD8(armNative)
  1370. PACE_END16(sysTrapSndStreamCreate,NONE,PACE_DATA32(channel))
  1371. PACE_BEGIN(Err SndStreamDelete(SndStreamRef channel))
  1372. PACE_ADD32(channel)
  1373. PACE_END16(sysTrapSndStreamDelete,NONE,NONE)
  1374. PACE_BEGIN(Err SndStreamStart(SndStreamRef channel))
  1375. PACE_ADD32(channel)
  1376. PACE_END16(sysTrapSndStreamStart,NONE,NONE)
  1377. PACE_BEGIN(Err SndStreamPause(SndStreamRef channel, Boolean pause))
  1378. PACE_ADD32(channel)
  1379. PACE_ADD8(pause)
  1380. PACE_END16(sysTrapSndStreamPause,NONE,NONE)
  1381. PACE_BEGIN(Err SndStreamStop(SndStreamRef channel))
  1382. PACE_ADD32(channel)
  1383. PACE_END16(sysTrapSndStreamStop,NONE,NONE)
  1384. PACE_BEGIN(Err SndStreamSetPan(SndStreamRef channel, Int32 panposition))
  1385. PACE_ADD32(channel)
  1386. PACE_ADD32(panposition)
  1387. PACE_END16(sysTrapSndStreamSetPan,NONE,NONE)
  1388. PACE_BEGIN(Err SndStreamSetVolume(SndStreamRef channel, Int32 volume))
  1389. PACE_ADD32(channel)
  1390. PACE_ADD32(volume)
  1391. PACE_END16(sysTrapSndStreamSetVolume,NONE,NONE)
  1392. PACE_BEGIN(Err SndStreamGetVolume(SndStreamRef channel, Int32 *volume))
  1393. PACE_ADD32(channel)
  1394. PACE_ADD32(volume)
  1395. PACE_END16(sysTrapSndStreamGetVolume,NONE,PACE_DATA32(volume))
  1396. PACE_BEGINEVENT(Boolean SysHandleEvent(EventPtr eventP))
  1397. PACE_ADD32(&ev)
  1398. PACE_END8(sysTrapSysHandleEvent,Event_ARM_To_M68K(eventP,ev),NONE)
  1399. PACE_BEGIN(void CtlDrawControl (ControlType *controlP))
  1400. PACE_ADD32(controlP)
  1401. PACE_END(sysTrapCtlDrawControl,NONE,NONE)
  1402. PACE_BEGIN(void FrmCopyLabel (FormType *formP, UInt16 labelID,const Char *newLabel))
  1403. PACE_ADD32(formP)
  1404. PACE_ADD16(labelID)
  1405. PACE_ADD32(newLabel)
  1406. PACE_END(sysTrapFrmCopyLabel,NONE,NONE)
  1407. PACE_BEGIN(void FldDrawField (FieldType *fldP))
  1408. PACE_ADD32(fldP)
  1409. PACE_END(sysTrapFldDrawField,NONE,NONE)
  1410. PACE_BEGIN(void FldSetTextPtr (FieldType *fldP, Char *textP))
  1411. PACE_ADD32(fldP)
  1412. PACE_ADD32(textP)
  1413. PACE_END(sysTrapFldSetTextPtr,NONE,NONE)
  1414. PACE_BEGIN(FormType *FrmGetFormPtr(UInt16 formId))
  1415. PACE_ADD16(formId)
  1416. PACE_ENDPTR(sysTrapFrmGetFormPtr,NONE,NONE)
  1417. PACE_BEGIN(FormType* FrmGetActiveForm())
  1418. PACE_ENDPTRVOID(sysTrapFrmGetActiveForm,NONE,NONE)
  1419. PACE_BEGINEVENT(Boolean FrmHandleEvent(FormType *formP, EventType *eventP))
  1420. PACE_ADD32(formP)
  1421. PACE_ADD32(&ev)
  1422. PACE_END8(sysTrapFrmHandleEvent,Event_ARM_To_M68K(eventP,ev),NONE)
  1423. PACE_BEGIN(void FrmHideObject(FormType *formP, UInt16 objIndex))
  1424. PACE_ADD32(formP)
  1425. PACE_ADD16(objIndex)
  1426. PACE_END(sysTrapFrmHideObject,NONE,NONE)
  1427. PACE_BEGIN(void FrmShowObject (FormType *formP, UInt16 objIndex))
  1428. PACE_ADD32(formP)
  1429. PACE_ADD16(objIndex)
  1430. PACE_END(sysTrapFrmShowObject,NONE,NONE)
  1431. PACE_BEGINEVENT(static Boolean _FrmDispatchEvent(EventType *eventP))
  1432. PACE_ADD32(&ev)
  1433. PACE_END8(sysTrapFrmDispatchEvent,Event_ARM_To_M68K(eventP,ev),NONE)
  1434. PACE_BEGIN(static void _FrmSetGadgetHandler(FormType *formP, UInt16 objIndex,FormGadgetHandlerType *attrP))
  1435. PACE_ADD32(formP)
  1436. PACE_ADD16(objIndex)
  1437. PACE_ADD32(attrP)
  1438. PACE_END(sysTrapFrmSetGadgetHandler,NONE,NONE)
  1439. PACE_BEGIN(static void _FrmSetEventHandler(FormType *formP,FormEventHandlerType *handler))
  1440. PACE_ADD32(formP)
  1441. PACE_ADD32(handler)
  1442. PACE_END(sysTrapFrmSetEventHandler,NONE,NONE)
  1443. PACE_BEGIN(static void _FrmDeleteForm(FormType *formP))
  1444. PACE_ADD32(formP)
  1445. PACE_END(sysTrapFrmDeleteForm,NONE,NONE)
  1446. PACE_BEGIN(static void _FrmReturnToForm(UInt16 formId))
  1447. PACE_ADD16(formId)
  1448. PACE_END(sysTrapFrmReturnToForm,NONE,NONE)
  1449. PACE_BEGIN(Err EvtEnqueueKey(WChar ascii, UInt16 keycode, UInt16 modifiers))
  1450. PACE_ADD16(ascii)
  1451. PACE_ADD16(keycode)
  1452. PACE_ADD16(modifiers)
  1453. PACE_END16(sysTrapEvtEnqueueKey,NONE,NONE)
  1454. PACE_BEGIN(FontID FntSetFont(FontID font))
  1455. PACE_ADD8(font)
  1456. PACE_END8(sysTrapFntSetFont,NONE,NONE)
  1457. PACE_BEGIN(UInt32 KeyCurrentState())
  1458. PACE_END32VOID(sysTrapKeyCurrentState,NONE,NONE)
  1459. PACE_BEGIN(UInt32 TimGetSeconds(void))
  1460. PACE_END32VOID(sysTrapTimGetSeconds,NONE,NONE)
  1461. PACE_BEGIN(void TimSecondsToDateTime(UInt32 seconds, DateTimeType *dateTimeP))
  1462. PACE_ADD32(seconds)
  1463. PACE_ADD32(dateTimeP)
  1464. PACE_END(sysTrapTimSecondsToDateTime,NONE,SwapStruct(dateTimeP,2,2,2,2,2,2,2,0))
  1465. /*PACE_BEGIN(Err KeyRates(Boolean set, UInt16 *initDelayP, UInt16 *periodP, 
  1466. UInt16 *doubleTapDelayP, Boolean *queueAheadP))
  1467. PACE_ADD8(set)
  1468. PACE_ADD32(initDelayP)
  1469. PACE_ADD32(periodP)
  1470. PACE_ADD32(doubleTapDelayP)
  1471. PACE_ADD32(queueAheadP)
  1472. PACE_END16(sysTrapKeyRates,PACE_DATA16(initDelayP) PACE_DATA16(periodP) PACE_DATA16(doubleTapDelayP),
  1473.    PACE_DATA16(initDelayP) PACE_DATA16(periodP) PACE_DATA16(doubleTapDelayP))
  1474. */
  1475. PACE_BEGIN(Err SysLibOpen(UInt16 refNum))
  1476. PACE_ADD16(refNum)
  1477. PACE_END16(sysLibTrapOpen,NONE,NONE)
  1478. PACE_BEGIN(Err SysLibClose(UInt16 refNum))
  1479. PACE_ADD16(refNum)
  1480. PACE_END16(sysLibTrapClose,NONE,NONE)
  1481. PACE_BEGIN(UInt32 RotationMgrGetLibAPIVersion(UInt16 refNum))
  1482. PACE_ADD16(refNum)
  1483. PACE_END32((sysLibTrapCustom+0),NONE,NONE)
  1484. PACE_BEGIN(Err RotationMgrAttributeGet(UInt16 refNum, UInt32 attribute, UInt32 *valueP))
  1485. PACE_ADD16(refNum)
  1486. PACE_ADD32(attribute)
  1487. PACE_ADD32(valueP)
  1488. PACE_END16((sysLibTrapCustom+5),NONE,PACE_DATA32(valueP));
  1489. PACE_BEGIN(UInt16 SysBatteryInfo(Boolean set, UInt16 *warnThresholdP, UInt16 *criticalThresholdP,
  1490. Int16 *maxTicksP, SysBatteryKind* kindP, Boolean *pluggedIn, UInt8 *percentP))
  1491. PACE_ADD8(set)
  1492. PACE_ADD32(warnThresholdP)
  1493. PACE_ADD32(criticalThresholdP)
  1494. PACE_ADD32(maxTicksP)
  1495. PACE_ADD32(kindP)
  1496. PACE_ADD32(pluggedIn)
  1497. PACE_ADD32(percentP)
  1498. PACE_END16(sysTrapSysBatteryInfo,NONE,PACE_CDATA16(warnThresholdP) PACE_CDATA16(criticalThresholdP) PACE_CDATA16(maxTicksP))
  1499. #ifdef HAVE_PALMONE_SDK
  1500. PACE_BEGIN(Err HsNavGetFocusRingInfo(const FormType* formP, UInt16* objectIDP, 
  1501.    Int16* extraInfoP, RectangleType* boundsInsideRingP,
  1502.    HsNavFocusRingStyleEnum* ringStyleP))
  1503. PACE_ADD16(hsSelNavGetFocusRingInfo)
  1504. PACE_ADD32(formP)
  1505. PACE_ADD32(objectIDP)
  1506. PACE_ADD32(extraInfoP)
  1507. PACE_ADD32(boundsInsideRingP)
  1508. PACE_ADD32(ringStyleP)
  1509. PACE_END16(sysTrapOEMDispatch, NONE, PACE_CDATA16(objectIDP) PACE_CDATA16(extraInfoP) PACE_CDATA16(ringStyleP) SwapStruct(boundsInsideRingP,2,2,2,2,0))
  1510. PACE_BEGINEX(Err HsNavDrawFocusRing(FormType* formP, UInt16 objectID, Int16 extraInfo,
  1511.     RectangleType* boundsInsideRingP,
  1512. HsNavFocusRingStyleEnum ringStyle, Boolean forceRestore),r)
  1513. PACE_ADD16(boundsInsideRingP->topLeft.x)
  1514. PACE_ADD16(boundsInsideRingP->topLeft.y)
  1515. PACE_ADD16(boundsInsideRingP->extent.x)
  1516. PACE_ADD16(boundsInsideRingP->extent.y)
  1517. PACE_VAR(PACE_PARAM)
  1518. PACE_ADD16(hsSelNavDrawFocusRing)
  1519. PACE_ADD16(objectID)
  1520. PACE_ADD16(extraInfo)
  1521. PACE_ADD32(r)
  1522. PACE_ADD16(ringStyle)
  1523. PACE_ADD8(forceRestore)
  1524. PACE_END16(sysTrapOEMDispatch,NONE,NONE)
  1525. PACE_BEGIN(Err HsNavRemoveFocusRing (FormType* formP))
  1526. PACE_ADD16(hsSelNavRemoveFocusRing)
  1527. PACE_ADD32(formP)
  1528. PACE_END16(sysTrapOEMDispatch,NONE,NONE)
  1529. PACE_BEGIN(void HsNavObjectTakeFocus (const FormType* formP, UInt16 objID))
  1530. PACE_ADD16(hsSelNavObjectTakeFocus)
  1531. PACE_ADD32(formP)
  1532. PACE_ADD16(objID)
  1533. PACE_END(sysTrapOEMDispatch,NONE,NONE)
  1534. PACE_BEGIN(Err HsLightCircumstance(Boolean add, UInt16 circumstance))
  1535. PACE_ADD16(hsSelLightCircumstance)
  1536. PACE_ADD8(add)
  1537. PACE_ADD16(circumstance)
  1538. PACE_END16(sysTrapOEMDispatch, NONE, NONE)
  1539. PACE_BEGIN(UInt16 HsCurrentLightCircumstance())
  1540. PACE_ADD16(hsGetCurrentLightCircumstance)
  1541. PACE_END16(sysTrapOEMDispatch, NONE, NONE)
  1542. PACE_BEGIN(Err HsAttrGet(UInt16 attr, UInt32 param, UInt32* valueP))
  1543. PACE_ADD16(hsSelAttrGet)
  1544. PACE_ADD16(attr)
  1545. PACE_ADD32(param)
  1546. PACE_ADD32(valueP)
  1547. PACE_END16(sysTrapOEMDispatch, NONE, PACE_DATA32(valueP))
  1548. PACE_BEGIN(Err HsAttrSet(UInt16 attr, UInt32 param, UInt32* valueP))
  1549. PACE_ADD16(hsSelAttrSet)
  1550. PACE_ADD16(attr)
  1551. PACE_ADD32(param)
  1552. PACE_ADD32(valueP)
  1553. PACE_END16(sysTrapOEMDispatch, PACE_DATA32(valueP), PACE_DATA32(valueP))
  1554. PACE_BEGIN(Err HWUBlinkLED(UInt16 refnum, Boolean b))
  1555. PACE_ADD16(refnum)
  1556. PACE_ADD8(b)
  1557. PACE_END16((sysLibTrapCustom+0),NONE,NONE)
  1558. PACE_BEGIN(Err HWUSetBlinkRate(UInt16 refnum, UInt16 rate))
  1559. PACE_ADD16(refnum)
  1560. PACE_ADD16(rate)
  1561. PACE_END16((sysLibTrapCustom+1),NONE,NONE)
  1562. PACE_BEGIN(Err HWUEnableDisplay(UInt16 refnum, Boolean on))
  1563. PACE_ADD16(refnum)
  1564. PACE_ADD8(on)
  1565. PACE_END16((sysLibTrapCustom+2),NONE,NONE)
  1566. PACE_BEGIN(Boolean HWUGetDisplayState(UInt16 refnum))
  1567. PACE_ADD16(refnum)
  1568. PACE_END8((sysLibTrapCustom+3),NONE,NONE)
  1569. PACE_BEGIN(void *DexGetDisplayAddress(UInt16 refnum))
  1570. PACE_ADD16(refnum)
  1571. PACE_ENDPTR((sysLibTrapCustom+4),NONE,NONE)
  1572. PACE_BEGIN(void DexGetDisplayDimensions(UInt16 refnum, Coord *width, Coord *height, UInt16 *rowBytes))
  1573. PACE_ADD16(refnum)
  1574. PACE_ADD32(width)
  1575. PACE_ADD32(height)
  1576. PACE_ADD32(rowBytes)
  1577. PACE_END((sysLibTrapCustom+5),NONE,PACE_CDATA16(width) PACE_CDATA16(height) PACE_CDATA16(rowBytes))
  1578. #endif
  1579. #ifdef HAVE_SONY_SDK
  1580. PACE_BEGIN(UInt32 VskGetAPIVersion(UInt16 refNum))
  1581. PACE_ADD16(refNum)
  1582. PACE_END32((sysLibTrapCustom+3),NONE,NONE)
  1583. PACE_BEGIN(Err VskSetState(UInt16 refNum, UInt16 stateType, UInt16 state))
  1584. PACE_ADD16(refNum)
  1585. PACE_ADD16(stateType)
  1586. PACE_ADD16(state)
  1587. PACE_END16((sysLibTrapCustom+6),NONE,NONE)
  1588. PACE_BEGIN(Err VskGetState(UInt16 refNum, UInt16 stateType, UInt16 *stateP))
  1589. PACE_ADD16(refNum)
  1590. PACE_ADD16(stateType)
  1591. PACE_ADD32(stateP)
  1592. PACE_END16((sysLibTrapCustom+7),NONE,PACE_DATA16(stateP))
  1593. #endif
  1594. PACE_BEGIN(Err SysLibLoad(UInt32 libType, UInt32 libCreator, UInt16 *refNumP))
  1595. PACE_ADD32(libType)
  1596. PACE_ADD32(libCreator)
  1597. PACE_ADD32(refNumP)
  1598. PACE_END16(sysTrapSysLibLoad,NONE,PACE_DATA16(refNumP))
  1599. PACE_BEGIN(Err SysLibFind(const Char *nameP, UInt16 *refNumP))
  1600. PACE_ADD32(nameP)
  1601. PACE_ADD32(refNumP)
  1602. PACE_END16(sysTrapSysLibFind,NONE,PACE_DATA16(refNumP))
  1603. NOINLINE MemPtr MemGluePtrNew(UInt32 Size)
  1604. {
  1605. MemPtr p = MemPtrNew(Size);
  1606. if (!p)
  1607. SysAppInfoPtr appInfoP;
  1608. UInt16 OwnerID = SysGetAppInfo(&appInfoP,&appInfoP)->memOwnerID;
  1609. p = MemChunkNew(0, Size,(UInt16)(OwnerID | memNewChunkFlagNonMovable | memNewChunkFlagAllowLarge));
  1610. }
  1611. return p;
  1612. }
  1613. NOINLINE FormEventHandlerType* FrmGetEventHandler(FormType *Form)
  1614. {
  1615. eventhandler *i,*j;
  1616. for (i=EventHandler,j=NULL;i;j=i,i=i->Next)
  1617. if (i->Form == Form)
  1618. {
  1619. if (j)
  1620. {
  1621. // move ahead for faster search next time
  1622. j->Next = i->Next;
  1623. i->Next = EventHandler;
  1624. EventHandler = i;
  1625. }
  1626. return i->Handler;
  1627. }
  1628. return NULL;
  1629. }
  1630. Boolean FrmDispatchEvent(EventType *eventP)
  1631. {
  1632. // avoid using m68k wrapper for some common events (which are sent to the active form)
  1633. if (eventP->eType == keyHoldEvent || eventP->eType == keyDownEvent || 
  1634. eventP->eType == keyUpEvent || eventP->eType == nilEvent ||
  1635. eventP->eType == penDownEvent || eventP->eType == penMoveEvent ||
  1636. eventP->eType == penUpEvent)
  1637. {
  1638. FormType *Form = FrmGetActiveForm();
  1639. FormEventHandlerType* Handler = FrmGetEventHandler(Form);
  1640. if (Handler)
  1641. {
  1642. // call ARM event handler
  1643. if (Handler(eventP))
  1644. return 1;
  1645. // call system event handler
  1646. return FrmHandleEvent(Form,eventP);
  1647. }
  1648. }
  1649. return _FrmDispatchEvent(eventP);
  1650. }
  1651. static void SetCodePtr(uint8_t* p,void* Ptr)
  1652. {
  1653. p[0] = (uint8_t)(((uint32_t)Ptr) >> 24);
  1654. p[1] = (uint8_t)(((uint32_t)Ptr) >> 16);
  1655. p[2] = (uint8_t)(((uint32_t)Ptr) >> 8);
  1656. p[3] = (uint8_t)(((uint32_t)Ptr) >> 0);
  1657. }
  1658. static void RemoveHandler(FormType *Form)
  1659. {
  1660. eventhandler* i;
  1661. for (i=EventHandler;i;i=i->Next)
  1662. if (i->Form == Form)
  1663. i->Form = NULL;
  1664. }
  1665. void FrmDeleteForm( FormType *formP )
  1666. {
  1667. _FrmDeleteForm(formP);
  1668. RemoveHandler(formP);
  1669. }
  1670. void FrmReturnToForm( UInt16 formId )
  1671. {
  1672. FormType* Form = FrmGetActiveForm();
  1673. _FrmReturnToForm(formId);
  1674. RemoveHandler(Form);
  1675. }
  1676. void* m68kCallBack(m68kcallback p,NativeFuncType* Func)
  1677. {
  1678. static const uint8_t Code[24] = 
  1679. { 0x4E,0x56,0x00,0x00, // link a6,#0
  1680.   0x48,0x6E,0x00,0x08,     // pea     8(a6)
  1681.   0x2F,0x3C,0x00,0x00,0x00,0x00, // move.l  #$ARM,-(sp)
  1682.   0x4E,0x4F, // trap    #$F
  1683.   0xA4,0x5A, // dc.w    $A45A
  1684.   0x70,0x00, // moveq   #0,d0
  1685.   0x4E,0x5E, // unlk    a6
  1686.   0x4E,0x75 }; // rts
  1687. memcpy(p,Code,sizeof(m68kcallback));
  1688. SetCodePtr((uint8_t*)p+10,(void*)(uint32_t)Func);
  1689. return p;
  1690. }
  1691. void FrmSetGadgetHandler(FormType *formP, UInt16 objIndex,FormGadgetHandlerType *attrP)
  1692. {
  1693. gadgethandler* i;
  1694. gadgethandler* Free = NULL;
  1695. for (i=GadgetHandler;i;i=i->Next)
  1696. {
  1697. if (i->Form == formP && i->Index == objIndex)
  1698. break;
  1699. if (!i->Form)
  1700. Free = i;
  1701. }
  1702. if (!i)
  1703. {
  1704. if (Free)
  1705. i = Free;
  1706. else
  1707. {
  1708. i = MemGluePtrNew(sizeof(gadgethandler));
  1709. i->Next = GadgetHandler;
  1710. GadgetHandler = i;
  1711. }
  1712. }
  1713. if (i)
  1714. {
  1715. static const uint8_t Code[68] = 
  1716. { 0x4E,0x56,0x00,0x00, // link a6,#0
  1717.   0x30,0x2E,0x00,0x0C, // move.w  $C(a6),d0
  1718.   0x22,0x2E,0x00,0x0E, // move.l  $E(a6),d1
  1719.   0x23,0xEE,0x00,0x08,0x00,0x00,0x00,0x00,  // move.l  8(a6),($Gadget).l
  1720.   0x33,0xC0,0x00,0x00,0x00,0x00, // move.w  d0,($Cmd).l
  1721.   0x23,0xC1,0x00,0x00,0x00,0x00, // move.l  d1,($Event).l
  1722.   0x2F,0x3C,0x00,0x00,0x00,0x00, // move.l  #This,-(sp)
  1723.   0x2F,0x39,0x00,0x00,0x00,0x00, // move.l  (Wrapper).l,-(sp)
  1724.   0x2F,0x39,0x00,0x00,0x00,0x00, // move.l  (Module).l,-(sp)
  1725.   0x20,0x79,0x00,0x00,0x00,0x00, // movea.l (PealCall).l,a0
  1726.   0x4E,0x90, // jsr     (a0)
  1727.   0x02,0x80,0x00,0x00,0x00,0xFF, // andi.l  #$FF,d0
  1728.   0x4E,0x5E, // unlk    a6
  1729.   0x4E,0x75 }; // rts
  1730. #if defined(_M_IX86)
  1731. const tchar_t* Name = T("tcpmp.dllWrapperGadgetHandler86");
  1732. i->Wrapper = SWAP32(Name);
  1733. #else
  1734. i->Wrapper = SWAP32(WrapperGadgetHandler);
  1735. #endif
  1736. i->Form = formP;
  1737. i->Index = objIndex;
  1738. i->Handler = attrP;
  1739. i->Module = Peal.Module;
  1740. i->PealCall = Peal.PealCall;
  1741. memcpy(i->Code,Code,sizeof(Code));
  1742. SetCodePtr(i->Code+16,&i->Gadget);
  1743. SetCodePtr(i->Code+22,&i->Cmd);
  1744. SetCodePtr(i->Code+28,&i->Event);
  1745. SetCodePtr(i->Code+34,i);
  1746. SetCodePtr(i->Code+40,&i->Wrapper);
  1747. SetCodePtr(i->Code+46,&i->Module);
  1748. SetCodePtr(i->Code+52,&i->PealCall);
  1749. _FrmSetGadgetHandler(formP,objIndex,(FormGadgetHandlerType*)i->Code);
  1750. }
  1751. }
  1752. void FrmSetEventHandler(FormType *formP,FormEventHandlerType *handler)
  1753. {
  1754. eventhandler* i;
  1755. eventhandler* Free = NULL;
  1756. for (i=EventHandler;i;i=i->Next)
  1757. {
  1758. if (i->Form == formP)
  1759. break;
  1760. if (!i->Form)
  1761. Free = i;
  1762. }
  1763. if (!i)
  1764. {
  1765. if (Free)
  1766. i = Free;
  1767. else
  1768. {
  1769. i = MemGluePtrNew(sizeof(eventhandler));
  1770. i->Next = EventHandler;
  1771. EventHandler = i;
  1772. }
  1773. }
  1774. if (i)
  1775. {
  1776. static const uint8_t Code[48] = 
  1777. { 0x4E,0x56,0x00,0x00, // link a6,#0
  1778.   0x23,0xEE,0x00,0x08,0x00,0x00,0x00,0x00, // move.l  arg_0(a6),(Event).l
  1779.   0x2F,0x3C,0x00,0x00,0x00,0x00, // move.l  #This,-(sp)
  1780.   0x2F,0x39,0x00,0x00,0x00,0x00, // move.l  (Wrapper).l,-(sp)
  1781.   0x2F,0x39,0x00,0x00,0x00,0x00, // move.l  (Module).l,-(sp)
  1782.   0x20,0x79,0x00,0x00,0x00,0x00, // movea.l (PealCall).l,a0
  1783.   0x4E,0x90, // jsr     (a0)
  1784.   0x4E,0x5E, // unlk    a6
  1785.   0x02,0x80,0x00,0x00,0x00,0xFF, // andi.l  #$FF,d0
  1786.   0x4E,0x75 }; // rts
  1787. #if defined(_M_IX86)
  1788. const tchar_t* Name = T("tcpmp.dllWrapperEventHandler86");
  1789. i->Wrapper = SWAP32(Name);
  1790. #else
  1791. i->Wrapper = SWAP32(WrapperEventHandler);
  1792. #endif
  1793. i->Form = formP;
  1794. i->Handler = handler;
  1795. i->Module = Peal.Module;
  1796. i->PealCall = Peal.PealCall;
  1797. i->Event = NULL;
  1798. memcpy(i->Code,Code,sizeof(Code));
  1799. SetCodePtr(i->Code+8,&i->Event);
  1800. SetCodePtr(i->Code+14,i);
  1801. SetCodePtr(i->Code+20,&i->Wrapper);
  1802. SetCodePtr(i->Code+26,&i->Module);
  1803. SetCodePtr(i->Code+32,&i->PealCall);
  1804. _FrmSetEventHandler(formP,(FormEventHandlerType*)i->Code);
  1805. }
  1806. }
  1807. void* PealLoadModule(uint16_t FtrId,Boolean Mem,Boolean OnlyFtr,Boolean MemSema)
  1808. {
  1809. uint16_t Param[4] = {SWAP16(FtrId),(uint8_t)Mem,(uint8_t)OnlyFtr,(uint8_t)MemSema};
  1810. return (void*)Call68K(SWAP32(Peal.LoadModule),&Param,sizeof(Param)|kPceNativeWantA0);
  1811. }
  1812. PACE_BEGIN(void* PealGetSymbol(void* Module,const tchar_t* Name))
  1813. PACE_ADD32(Module)
  1814. PACE_ADD32(Name)
  1815. }; return (void*)Call68K(SWAP32(Peal.GetSymbol),PACE_PARAM,sizeof(PACE_PARAM)|kPceNativeWantA0);
  1816. }
  1817. PACE_BEGIN(void PealFreeModule(void* Module))
  1818. PACE_ADD32(Module)
  1819. }; Call68K(SWAP32(Peal.FreeModule),PACE_PARAM,sizeof(PACE_PARAM));
  1820. }
  1821. Err FrmGlueNavGetFocusRingInfo(const FormType* formP, UInt16* objectIDP, 
  1822.     Int16* extraInfoP, RectangleType* boundsInsideRingP,
  1823.     FrmNavFocusRingStyleEnum* ringStyleP)
  1824. {
  1825. UInt32 ver;
  1826. if (FtrGet(sysFileCSystem, sysFtrNumFiveWayNavVersion, &ver)==errNone)
  1827. return FrmNavGetFocusRingInfo(formP,objectIDP,extraInfoP,boundsInsideRingP,ringStyleP);
  1828. #ifdef HAVE_PALMONE_SDK
  1829. else if (FtrGet(hsFtrCreator,hsFtrIDNavigationSupported,&ver)==errNone)
  1830. return HsNavGetFocusRingInfo(formP,objectIDP,extraInfoP,boundsInsideRingP,ringStyleP);
  1831. #endif
  1832. return uilibErrObjectFocusModeOff;
  1833. }
  1834. Err FrmGlueNavDrawFocusRing(FormType* formP, UInt16 objectID, Int16 extraInfo,
  1835.     RectangleType* boundsInsideRingP,
  1836.     FrmNavFocusRingStyleEnum ringStyle, Boolean forceRestore)
  1837. {
  1838. UInt32 ver;
  1839. if (FtrGet(sysFileCSystem, sysFtrNumFiveWayNavVersion, &ver)==errNone)
  1840. return FrmNavDrawFocusRing(formP,objectID,extraInfo,boundsInsideRingP,ringStyle,forceRestore);
  1841. #ifdef HAVE_PALMONE_SDK
  1842. else if (FtrGet(hsFtrCreator,hsFtrIDNavigationSupported,&ver)==errNone)
  1843. return HsNavDrawFocusRing(formP,objectID,extraInfo,boundsInsideRingP,ringStyle,forceRestore);
  1844. #endif
  1845. return uilibErrObjectFocusModeOff;
  1846. }
  1847. Err FrmGlueNavRemoveFocusRing (FormType* formP)
  1848. {
  1849. UInt32 ver;
  1850. if (FtrGet(sysFileCSystem, sysFtrNumFiveWayNavVersion, &ver)==errNone)
  1851. return FrmNavRemoveFocusRing(formP);
  1852. #ifdef HAVE_PALMONE_SDK
  1853. else if (FtrGet(hsFtrCreator,hsFtrIDNavigationSupported,&ver)==errNone)
  1854. return HsNavRemoveFocusRing(formP);
  1855. #endif
  1856. return uilibErrObjectFocusModeOff;
  1857. }
  1858. void FrmGlueNavObjectTakeFocus(FormType* formP, UInt16 objID)
  1859. {
  1860. UInt32 ver;
  1861. if (FtrGet(sysFileCSystem, sysFtrNumFiveWayNavVersion, &ver)==errNone)
  1862. FrmNavObjectTakeFocus(formP,objID);
  1863. #ifdef HAVE_PALMONE_SDK
  1864. else if (FtrGet(hsFtrCreator,hsFtrIDNavigationSupported,&ver)==errNone)
  1865. HsNavObjectTakeFocus(formP,objID);
  1866. #endif
  1867. }
  1868. Boolean FrmGlueNavIsSupported(void)
  1869. {
  1870. UInt32 ver;
  1871. if (FtrGet(sysFileCSystem, sysFtrNumFiveWayNavVersion, &ver)==errNone)
  1872. return 1;
  1873. #ifdef HAVE_PALMONE_SDK
  1874. if (FtrGet(hsFtrCreator,hsFtrIDNavigationSupported,&ver)==errNone)
  1875. return 1;
  1876. #endif
  1877. return 0;
  1878. }
  1879. PACE_BEGIN(Err FrmNavGetFocusRingInfo(const FormType* formP, UInt16* objectIDP, 
  1880.    Int16* extraInfoP, RectangleType* boundsInsideRingP,
  1881.    FrmNavFocusRingStyleEnum* ringStyleP))
  1882. PACE_ADD16(NavSelectorFrmNavGetFocusRingInfo)
  1883. PACE_ADD32(formP)
  1884. PACE_ADD32(objectIDP)
  1885. PACE_ADD32(extraInfoP)
  1886. PACE_ADD32(boundsInsideRingP)
  1887. PACE_ADD32(ringStyleP)
  1888. PACE_END16(sysTrapNavSelector, NONE, PACE_CDATA16(objectIDP) PACE_CDATA16(extraInfoP) PACE_CDATA16(ringStyleP) SwapStruct(boundsInsideRingP,2,2,2,2,0))
  1889. PACE_BEGINEX(Err FrmNavDrawFocusRing(FormType* formP, UInt16 objectID, Int16 extraInfo,
  1890.     RectangleType* boundsInsideRingP,
  1891. FrmNavFocusRingStyleEnum ringStyle, Boolean forceRestore),r)
  1892. PACE_ADD16(boundsInsideRingP->topLeft.x)
  1893. PACE_ADD16(boundsInsideRingP->topLeft.y)
  1894. PACE_ADD16(boundsInsideRingP->extent.x)
  1895. PACE_ADD16(boundsInsideRingP->extent.y)
  1896. PACE_VAR(PACE_PARAM)
  1897. PACE_ADD16(NavSelectorFrmNavDrawFocusRing)
  1898. PACE_ADD16(objectID)
  1899. PACE_ADD16(extraInfo)
  1900. PACE_ADD32(r)
  1901. PACE_ADD16(ringStyle)
  1902. PACE_ADD8(forceRestore)
  1903. PACE_END16(sysTrapNavSelector,NONE,NONE)
  1904. PACE_BEGIN(Err FrmNavRemoveFocusRing (FormType* formP))
  1905. PACE_ADD16(NavSelectorFrmNavRemoveFocusRing)
  1906. PACE_ADD32(formP)
  1907. PACE_END16(sysTrapNavSelector,NONE,NONE)
  1908. PACE_BEGIN(void FrmNavObjectTakeFocus (const FormType* formP, UInt16 objID))
  1909. PACE_ADD16(NavSelectorFrmNavObjectTakeFocus)
  1910. PACE_ADD32(formP)
  1911. PACE_ADD16(objID)
  1912. PACE_END(sysTrapNavSelector,NONE,NONE)
  1913. #endif