|
From: <and...@us...> - 2006-04-18 18:34:36
|
Revision: 1295 Author: andreradke Date: 2006-04-18 11:34:24 -0700 (Tue, 18 Apr 2006) ViewCVS: http://svn.sourceforge.net/frontierkernel/?rev=1295&view=rev Log Message: ----------- Make MacBird cards work on Intel Macs, at least the standard Jump and Get Info dialogs. Integer values stored in packed cards need to be byte-swapped on Intel Macs. Modified Paths: -------------- Frontier/trunk/Common/IowaRuntime/Headers/iowacore.h Frontier/trunk/Common/IowaRuntime/Source/iowacore.c Frontier/trunk/Common/IowaRuntime/Source/iowaruntime.c Modified: Frontier/trunk/Common/IowaRuntime/Headers/iowacore.h =================================================================== --- Frontier/trunk/Common/IowaRuntime/Headers/iowacore.h 2006-04-18 17:51:46 UTC (rev 1294) +++ Frontier/trunk/Common/IowaRuntime/Headers/iowacore.h 2006-04-18 18:34:24 UTC (rev 1295) @@ -28,6 +28,7 @@ #ifndef iowacoreinclude #define iowacoreinclude +#include "byteorder.h" /* 2006-04-17 aradke: for SWAP_BYTE_ORDER */ #ifdef coderesource /*we're building into a UCMD*/ @@ -105,8 +106,26 @@ short defaulttextcolor; short defaultframecolor; + +#ifdef SWAP_BYTE_ORDER + unsigned short wastebits: 10; /*room for more booleans*/ + + unsigned short floater: 1; + + unsigned short flinvisiblegrid: 1; + + unsigned short flselection: 1; + + unsigned short flgrid: 1; + + unsigned short defaulttransparent: 1; + unsigned short defaulthasframe: 1; + +#else + + unsigned short defaulthasframe: 1; unsigned short defaulttransparent: 1; @@ -119,7 +138,9 @@ unsigned short floater: 1; unsigned short wastebits: 10; /*room for more booleans*/ - + +#endif + short gridunits; short rightborder, bottomborder; @@ -163,8 +184,28 @@ short objectlinespacing; short objectindentation; + +#ifdef SWAP_BYTE_ORDER + unsigned short wastebits: 9; /* room for more booleans */ + + unsigned short objectdisabled: 1; + + unsigned short objectfastscript: 1; + + unsigned short objecttransparent: 1; + + unsigned short lastinlist: 1; + + unsigned short objectinvisible: 1; + + unsigned short objectflag: 1; + unsigned short objecthasframe: 1; + +#else + + unsigned short objecthasframe: 1; unsigned short objectflag: 1; @@ -178,6 +219,10 @@ unsigned short objectdisabled: 1; + unsigned short wastebits: 9; /* room for more booleans */ + +#endif + long objecttype; /*room for lots of object types*/ RGBColor objectfillcolor, objecttextcolor, objectframecolor; Modified: Frontier/trunk/Common/IowaRuntime/Source/iowacore.c =================================================================== --- Frontier/trunk/Common/IowaRuntime/Source/iowacore.c 2006-04-18 17:51:46 UTC (rev 1294) +++ Frontier/trunk/Common/IowaRuntime/Source/iowacore.c 2006-04-18 18:34:24 UTC (rev 1295) @@ -29,6 +29,7 @@ #include "standard.h" #include "shelltypes.h" +#include "byteorder.h" #ifdef iowaRuntime @@ -2728,12 +2729,60 @@ boolean unpackobject (hdlobject *hobject, boolean *lastinlist) { + /* + 2006-04-17 aradke: must convert packed data to native byte-order on Intel Macs + */ + tydiskobject info; tyobject obj; hdlobject h; moveleft (unpack.p, &info, longsizeof (info)); + disktomemshort (info.versionnumber); + + disktomemshort (info.objectrect.top); + disktomemshort (info.objectrect.left); + disktomemshort (info.objectrect.bottom); + disktomemshort (info.objectrect.right); + + disktomemlong (info.lenname); + disktomemlong (info.lenvalue); + disktomemlong (info.lenscript); + disktomemlong (info.lendata); + + disktomemshort (info.objectfontsize); + disktomemshort (info.objectstyle); + disktomemshort (info.objectjustification); + disktomemshort (info.objectrecalcstatus); + disktomemshort (info.objectrecalcperiod); + disktomemshort (info.unused1); + disktomemshort (info.objectdropshadowdepth); + disktomemshort (info.objectlinespacing); + disktomemshort (info.objectindentation); + + /* + 2006-04-17 aradke: The info.objecthasframe etc. bit-field doesn't need to be byte-swapped, + because this is already taken care of via the endian-specific definition in iowacore.h. + */ + + disktomemlong (info.objecttype); + + disktomemshort (info.objectfillcolor.red); + disktomemshort (info.objectfillcolor.green); + disktomemshort (info.objectfillcolor.blue); + + disktomemshort (info.objecttextcolor.red); + disktomemshort (info.objecttextcolor.green); + disktomemshort (info.objecttextcolor.blue); + + disktomemshort (info.objectframecolor.red); + disktomemshort (info.objectframecolor.green); + disktomemshort (info.objectframecolor.blue); + + disktomemlong (info.objectlanguage); + disktomemlong (info.lenrecalcscript); + if (info.versionnumber == 1) /*record format changed to allow 4 bytes for object type*/ info.objecttype = (unsigned long) info.v1objecttype; @@ -2898,6 +2947,10 @@ boolean iowaunpack (Handle hpacked) { + + /* + 2006-04-17 aradke: must convert packed data to native byte-order on Intel Macs + */ hdlcard hc = iowadata; hdlobject newlist; @@ -2917,6 +2970,8 @@ unpack.p += longsizeof (header); + disktomemshort (header.versionnumber); + if (header.versionnumber < 4) { /*the header grew by 66 bytes in version 4*/ header.lenwindowtitle = 0; @@ -2924,6 +2979,30 @@ unpack.p -= 66; } + disktomemshort (header.v2backcolor); + + disktomemlong (header.lenembeddedtable); + + disktomemshort (header.defaultfillcolor); + disktomemshort (header.defaulttextcolor); + disktomemshort (header.defaultframecolor); + + /* + 2006-04-17 aradke: The header.defaulthasframe etc. bit-field doesn't need to be byte-swapped, + because this is already taken care of via the endian-specific definition in iowacore.h. + */ + + disktomemshort (header.gridunits); + disktomemshort (header.rightborder); + disktomemshort (header.bottomborder); + + disktomemshort (header.backcolor.red); + disktomemshort (header.backcolor.green); + disktomemshort (header.backcolor.blue); + + disktomemlong (header.idwindow); + disktomemlong (header.lenwindowtitle); + if (header.versionnumber <= 2) /*back color was stored as an index, now stored as a RGBColor*/ oldclutconverter (header.v2backcolor, &header.backcolor); Modified: Frontier/trunk/Common/IowaRuntime/Source/iowaruntime.c =================================================================== --- Frontier/trunk/Common/IowaRuntime/Source/iowaruntime.c 2006-04-18 17:51:46 UTC (rev 1294) +++ Frontier/trunk/Common/IowaRuntime/Source/iowaruntime.c 2006-04-18 18:34:24 UTC (rev 1295) @@ -28,6 +28,8 @@ #include "frontier.h" #include "standard.h" +#include "byteorder.h" + #include "shelltypes.h" #include <appletdefs.h> #include <iac.h> @@ -2051,6 +2053,8 @@ moveleft (*hpackedcard, &header, longsizeof (header)); + disktomemlong (header.idwindow); /* 2006-04-17 aradke: for Mac Intel */ + switch (header.idwindow) { case 1024: case 1025: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |