home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / misc / document / macdrawf.txt < prev    next >
Text File  |  1992-11-05  |  12KB  |  462 lines

  1. MacDraw format
  2.  
  3. Every couple of months someone requests this information on info-mac.
  4. Attached is the front end to a MacDraw-to-Imagen translator.
  5. It is in the C language header format.
  6. Microsoft graphics programs also output MacDraw format.
  7.  
  8. /*
  9.  *      Description of MacDraw file
  10.  *
  11.  *      <MacDraw file> ::= HeadPacket <ObjectList> <End Object>
  12.  *      <Object List> ::= <Object List> <Object> | <Object>
  13.  *      <Object> ::= <Complex Object> | <Simple Object>
  14.  *      <Complex Object> ::= <Nest Object> <Object List> <End Object>
  15.  *      <Simple Object> ::= HeadWord <Body>
  16.  *      <Object Body> ::= endObject | textObject | gridlineObject |
  17.  *                        lineObject | rectObject | roundrectObject |
  18.  *                        ovalObject | arcObject | freehandObject |
  19.  *                        polyObject | nestObject
  20.  *      <Nest Object> ::= HeadWord nestObject
  21.  *      <End Object> ::= HeadWord endObject
  22.  */
  23.  
  24. /* integer types */
  25. typedef unsigned char   int8;
  26. typedef short int       int16;
  27. typedef long int        int32;
  28.  
  29. #define NOBJECTS        11
  30.  
  31. /* packet at head of MacDraw file */
  32. struct  HeadPacket      {
  33.         int16   unknown1[85];
  34.         int16   PlotWidth;
  35.         int16   PlotHeight;
  36.         int16   PageWidth;
  37.         int16   PageHeight;
  38.         int16   unknown2[167];
  39.         } HeadPacket;
  40.  
  41. /* word at beginning of each graphical object */
  42. struct  HeadWord        {
  43.         int8    ObjectType;
  44.         int8    Lock;
  45.         int16   unknown;
  46.         } HeadWord;
  47.  
  48. /* ObjectType values */
  49. #define endObject       0
  50. #define textObject      1
  51. #define gridlineObject  2
  52. #define lineObject      3
  53. #define rectObject      4
  54. #define roundrectObject 5
  55. #define ovalObject      6
  56. #define arcObject       7
  57. #define freehandObject  8
  58. #define polyObject      9
  59. #define nestObject      10
  60. /* Object #11, Paint format bitmaps is not defined here */
  61.  
  62. /* Lock values */
  63. #define unlocked        0
  64. #define locked          1
  65.  
  66. /* end object delimiter */
  67. struct  End     {
  68.         int8    LineFat;
  69.         int8    LinePat;
  70.         int8    FillPat;
  71.         int8    unknown;
  72.         } End;
  73.  
  74. /* LineFat values */
  75. #define NFat            6
  76. #define invisibleLine   1
  77. #define thinLine        2
  78. #define mediumLine      3
  79. #define thickLine       4
  80. #define fatLine         5
  81. #define defaultLine     2
  82. /* fatness in rasters */
  83. float FatTable[NFat] = {0.,0.,1.,2.,3.5,5.};
  84.  
  85. /* LinePat, FillPat values */
  86. #define NPat            37
  87. #define noPat           1
  88. #define whitePat        2
  89. #define blackPat        3
  90. #define darkgrayPat     4
  91. #define medgrayPat      5
  92. #define lightgrayPat    6
  93. #define coarsedotsPat   7
  94. #define dotsPat         8
  95. #define sparsedotsPat   9
  96. #define topshinglePat   10
  97. #define brickPat        11
  98. #define slantbrickPat   12
  99. #define leftdiagPat     13
  100. #define thickleftdiagPat        14
  101. #define dashleftdiagPat 15
  102. #define narrowleftdiagPat       16
  103. #define heavyleftdiagPat        17
  104. #define dualdiagPat     18
  105. #define horzdashpat     19
  106. #define horzlinePat     20
  107. #define circlePat       21
  108. #define fourwayPat      22
  109. #define smallhatchedPat 23
  110. #define smalldiamondPat 24
  111. #define rightdiagPat    25
  112. #define thickrightdiagPat       26
  113. #define dashrightdiagPat        27
  114. #define narrowrightdiagPat      28
  115. #define heavyrightdiagPat       29
  116. #define trianglePat     30
  117. #define vertdashpat     31
  118. #define vertlinePat     32
  119. #define rightshinglePat 33
  120. #define heartPat        34
  121. #define largehatchedPat 35
  122. #define largediamondPat 36
  123.  
  124. /* pattern masks */
  125. #define MPat                    8
  126. unsigned char Pat[NPat][MPat] = {
  127. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  128. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  129. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  130. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  131. 0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,
  132. 0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,
  133. 0x88,0x22,0x88,0x22,0x88,0x22,0x88,0x22,
  134. 0x88,0x00,0x22,0x00,0x88,0x00,0x22,0x00,
  135. 0x80,0x00,0x08,0x00,0x80,0x00,0x08,0x00,
  136. 0x08,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
  137. 0x80,0x80,0x41,0x3E,0x08,0x08,0x14,0xE3,
  138. 0x08,0x1C,0x22,0x41,0x80,0x01,0x02,0x04,
  139. 0xFF,0x80,0x80,0x80,0xFF,0x08,0x08,0x08,
  140. 0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02,
  141. 0x81,0xC0,0x60,0x30,0x18,0x0C,0x06,0x03,
  142. 0x11,0x88,0x44,0x00,0x11,0x88,0x44,0x00,
  143. 0x11,0x88,0x44,0x22,0x11,0x88,0x44,0x22,
  144. 0x33,0x99,0xCC,0x66,0x33,0x99,0xCC,0x66,
  145. 0x01,0x80,0x40,0x00,0x02,0x04,0x08,0x00,
  146. 0x66,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
  147. 0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
  148. 0x50,0x20,0x20,0x20,0x50,0x88,0x27,0x88,
  149. 0x84,0x9F,0x80,0x80,0x04,0x04,0xE7,0x84,
  150. 0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0xFF,
  151. 0x55,0x88,0x55,0x22,0x55,0x88,0x55,0x22,
  152. 0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40,
  153. 0xC0,0x81,0x03,0x06,0x0C,0x18,0x30,0x60,
  154. 0x88,0x11,0x22,0x00,0x88,0x11,0x22,0x00,
  155. 0x88,0x11,0x22,0x44,0x88,0x11,0x22,0x44,
  156. 0xCC,0x99,0x33,0x66,0xCC,0x99,0x33,0x66,
  157. 0x20,0x50,0x00,0x00,0x02,0x05,0x00,0x00,
  158. 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
  159. 0x04,0x04,0x40,0x40,0x04,0x04,0x40,0x40,
  160. 0x03,0x84,0x48,0x30,0x0C,0x02,0x01,0x01,
  161. 0x0A,0x11,0xA0,0x40,0x00,0xB1,0x4A,0x4A,
  162. 0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,
  163. 0x41,0x22,0x14,0x08,0x14,0x22,0x41,0x80
  164. };
  165.  
  166. /* text object */
  167. struct  Text    {
  168.         int8    LineFat;
  169.         int8    LinePat;
  170.         int8    FillPat;
  171.         int8    unknown1;
  172.         int16   BoxDx;
  173.         int16   BoxDy;
  174.         int8    Style;
  175.         int8    Font;
  176.         int8    Size;
  177.         int8    LineSpace;
  178.         int8    Justify;
  179.         int8    Orient;
  180.         int8    unknown2;
  181.         int8    CharCount;
  182.         int16   Top;
  183.         int16   Left;
  184.         int16   Bottom;
  185.         int16   Right;
  186.         /* plus CharCount bytes */
  187.         } Text;
  188. char    TextString[256];
  189.  
  190. /* Style values */
  191. #define plainStyle      0
  192. #define boldStyle       1
  193. #define italicStyle     2
  194. #define underlineStyle  4
  195. #define outlineStyle    8
  196. #define shadowStyle     16
  197. #define defaultStyle    0
  198.  
  199. /* Font values */
  200. #define ChicagoFont     1
  201. #define GenevaFont      2
  202. #define NewYorkFont     3
  203. #define MonocoFont      4
  204. #define VeniceFont      5
  205. #define LondonFont      6
  206. #define AthensFont      7
  207. #define defaultFont     1
  208.  
  209. /* Size values */
  210. #define size9           1
  211. #define size10          2
  212. #define size12          3
  213. #define size14          4
  214. #define size18          5
  215. #define size24          6
  216. #define size36          7
  217. #define size48          8
  218. #define NTextSize       9
  219.  
  220. /* LineSpace values */
  221. #define singleSpace     1
  222. #define halfSpace       2
  223. #define doubleSpace     3
  224. #define defaultSpace    1
  225.  
  226. /* Justify values */
  227. #define leftJustify     1
  228. #define centerJustify   2
  229. #define rightJustify    3
  230. #define defaultJustify  1
  231.  
  232. /* Orient values */
  233. #define deg0Orient              0
  234. #define deg90Orient             3
  235. #define deg180Orient            2
  236. #define deg270Orient            1
  237. #define reflect0Orient          4
  238. #define reflect90Orient         6
  239. #define reflect180Orient        5
  240. #define reflect270Orient        7
  241.  
  242. /* grid line object */
  243. struct  GridLine        {
  244.         int8    LineFat;
  245.         int8    LinePat;
  246.         int8    FillPat;
  247.         int8    Arrow;
  248.         int16   y1;
  249.         int16   unknown1;
  250.         int16   x1;
  251.         int16   unknown2;
  252.         int16   y2;
  253.         int16   unknown3;
  254.         int16   x2;
  255.         int16   unknown4;
  256.         } GridLine;
  257.  
  258. /* Arrow values */
  259. #define noArrow         0
  260. #define rightArrow      1
  261. #define leftArrow       2
  262. #define bothArrow       3
  263. #define defaultArrow    0
  264. /* arrow length in rasters */
  265. float ArrowSize[NFat] = {0.,0.,5.,10.,17.,25.};
  266. /* arrow angle in radians */
  267. #define ARROW_ANGLE     .5
  268.  
  269. /* line object */
  270. struct  Line    {
  271.         int8    LineFat;
  272.         int8    LinePat;
  273.         int8    FillPat;
  274.         int8    Arrow;
  275.         int16   y1;
  276.         int16   unknown1;
  277.         int16   x1;
  278.         int16   unknown2;
  279.         int16   y2;
  280.         int16   unknown3;
  281.         int16   x2;
  282.         int16   unknown4;
  283.         } Line;
  284.  
  285. /* rectangle object */
  286. struct  Rect    {
  287.         int8    LineFat;
  288.         int8    LinePat;
  289.         int8    FillPat;
  290.         int8    Corner;
  291.         int16   Top;
  292.         int16   unknown1;
  293.         int16   Left;
  294.         int16   unknown2;
  295.         int16   Bottom;
  296.         int16   unknown3;
  297.         int16   Right;
  298.         int16   unknown4;
  299.         } Rect;
  300.  
  301. /* Corner values */
  302. #define NCorner         6
  303. #define zeroCorner      0
  304. #define one8Corner      1
  305. #define three16Corner   2
  306. #define one4Corner      3
  307. #define five16Corner    4
  308. #define three8Corner    5
  309. /* radii in inches */
  310. float RadiusTable[NCorner] = {0.,.125,.1875,.25,.3125,.375};
  311.  
  312. /* rounded rectangle object */
  313. struct  RoundRect       {
  314.         int8    LineFat;
  315.         int8    LinePat;
  316.         int8    FillPat;
  317.         int8    Corner;
  318.         int16   Top;
  319.         int16   unknown1;
  320.         int16   Left;
  321.         int16   unknown2;
  322.         int16   Bottom;
  323.         int16   unknown3;
  324.         int16   Right;
  325.         int16   unknown4;
  326.         } RoundRect;
  327.  
  328. /* oval object */
  329. struct  Oval    {
  330.         int8    LineFat;
  331.         int8    LinePat;
  332.         int8    FillPat;
  333.         int8    unknown;
  334.         int16   Top;
  335.         int16   unknown1;
  336.         int16   Left;
  337.         int16   unknown2;
  338.         int16   Bottom;
  339.         int16   unknown3;
  340.         int16   Right;
  341.         int16   unknown4;
  342.         } Oval;
  343.  
  344. /* arc object */
  345. struct  Arc     {
  346.         int8    LineFat;
  347.         int8    LinePat;
  348.         int8    FillPat;
  349.         int8    unknown;
  350.         int16   Top;
  351.         int16   unknown1;
  352.         int16   Left;
  353.         int16   unknown2;
  354.         int16   Bottom;
  355.         int16   unknown3;
  356.         int16   Right;
  357.         int16   unknown4;
  358.         int16   StartAngle;
  359.         int16   NDegree;
  360.         } Arc;
  361.  
  362. /* point objects */
  363. #define NPoint          256
  364. struct  Point   {
  365.         int16   y;
  366.         int16   unknown1;
  367.         int16   x;
  368.         int16   unknown2;
  369.         } Point[NPoint];
  370.  
  371. struct Delta    {
  372.         char    dx;
  373.         char    dy;
  374.         } Delta[NPoint];
  375.  
  376. /* freehand line object */
  377. struct  FreeHand        {
  378.         int8    LineFat;
  379.         int8    LinePat;
  380.         int8    FillPat;
  381.         int8    unknown1;
  382.         int16   unknown2;
  383.         int16   Bytes;
  384.         int16   PointCount;
  385.         int16   Top;
  386.         int16   unknown3;
  387.         int16   Left;
  388.         int16   unknown4;
  389.         int16   Bottom;
  390.         int16   unknown5;
  391.         int16   Right;
  392.         int16   unknown6;
  393.         int16   unknown7;
  394.         int16   y1;
  395.         int16   unknown8;
  396.         int16   x1;
  397.         int16   unknown9;
  398.         /* plus Bytes-28 bytes or Bytes/2-14 dx,dy pairs */
  399.         } FreeHand;
  400.  
  401. /* polygon object */
  402. struct  Poly    {
  403.         int8    LineFat;
  404.         int8    LinePat;
  405.         int8    FillPat;
  406.         int8    unknown1;
  407.         int16   unknown2;
  408.         int16   Bytes;
  409.         int16   PointCount;
  410.         int16   unknown3;
  411.         int16   unknown4;
  412.         int16   Top;
  413.         int16   unknown5;
  414.         int16   Left;
  415.         int16   unknown6;
  416.         int16   Bottom;
  417.         int16   unknown7;
  418.         int16   Right;
  419.         /* plus Bytes-20 or PointCount*4 bytes, PointCount x,y pairs */
  420.         } Poly;
  421.  
  422. /* nest object delimiter */
  423. struct  Nest    {
  424.         int8    LineFat;
  425.         int8    LinePat;
  426.         int8    FillPat;
  427.         int8    unknown1;
  428.         int16   unknown2;
  429.         int16   ObjectCount;
  430.         int16   unknown3;
  431.         int16   Bytes;
  432.         int16   Top;
  433.         int16   unknown4;
  434.         int16   Left;
  435.         int16   unknown5;
  436.         int16   Bottom;
  437.         int16   unknown6;
  438.         int16   Right;
  439.         int16   unknown7[5];
  440.         } Nest;
  441.  
  442. /*
  443.  *      count Object lengths
  444.  *
  445.  *      #include "MacDraw.h"
  446.  *      main(){
  447.  *              printf ("HeadPacket=%d\n",sizeof(HeadPacket));
  448.  *              printf ("HeadWord=%d\n",sizeof(HeadWord));
  449.  *              printf ("End=%d\n",sizeof(End));
  450.  *              printf ("Text=%d\n",sizeof(Text));
  451.  *              printf ("GridLine=%d\n",sizeof(GridLine));
  452.  *              printf ("Line=%d\n",sizeof(Line));
  453.  *              printf ("Rect=%d\n",sizeof(Rect));
  454.  *              printf ("RoundRect=%d\n",sizeof(RoundRect));
  455.  *              printf ("Oval=%d\n",sizeof(Oval));
  456.  *              printf ("Arc=%d\n",sizeof(Arc));
  457.  *              printf ("FreeHand=%d\n",sizeof(FreeHand));
  458.  *              printf ("Poly=%d\n",sizeof(Poly));
  459.  *              printf ("Nest=%d\n",sizeof(Nest));
  460.  *              };
  461.  */
  462.