home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / tech / macdrawf.txt < prev    next >
Text File  |  1986-04-11  |  10KB  |  468 lines

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