home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / oslib / oslib_1 / OSLib / User / h / drawfile < prev    next >
Encoding:
Text File  |  1995-08-21  |  18.0 KB  |  603 lines

  1. #ifndef drawfile_H
  2. #define drawfile_H
  3.  
  4. /* C header file for DrawFile
  5.  * written by DefMod (Jul 24 1995) on Mon Aug 21 11:57:24 1995
  6.  * Jonathan Coxhead, Acorn Computers Ltd
  7.  */
  8.  
  9. #ifndef types_H
  10. #include "types.h"
  11. #endif
  12.  
  13. #ifndef os_H
  14. #include "os.h"
  15. #endif
  16.  
  17. #ifndef osspriteop_H
  18. #include "osspriteop.h"
  19. #endif
  20.  
  21. #ifndef draw_H
  22. #include "draw.h"
  23. #endif
  24.  
  25. #ifndef font_H
  26. #include "font.h"
  27. #endif
  28.  
  29. #ifndef wimp_H
  30. #include "wimp.h"
  31. #endif
  32.  
  33. #ifndef jpeg_H
  34. #include "jpeg.h"
  35. #endif
  36.  
  37. /**********************************
  38.  * SWI names and SWI reason codes *
  39.  **********************************/
  40. #undef  DrawFile_Render
  41. #define DrawFile_Render                         0x45540
  42. #undef  XDrawFile_Render
  43. #define XDrawFile_Render                        0x65540
  44. #undef  DrawFile_BBox
  45. #define DrawFile_BBox                           0x45541
  46. #undef  XDrawFile_BBox
  47. #define XDrawFile_BBox                          0x65541
  48. #undef  DrawFile_DeclareFonts
  49. #define DrawFile_DeclareFonts                   0x45542
  50. #undef  XDrawFile_DeclareFonts
  51. #define XDrawFile_DeclareFonts                  0x65542
  52. #undef  Service_DrawObjectRender
  53. #define Service_DrawObjectRender                0x45540
  54. #undef  Service_DrawObjectDeclareFonts
  55. #define Service_DrawObjectDeclareFonts          0x45541
  56.  
  57. /************************************
  58.  * Structure and union declarations *
  59.  ************************************/
  60. typedef struct drawfile_font_def                drawfile_font_def;
  61. typedef struct drawfile_text_style              drawfile_text_style;
  62. typedef struct drawfile_path_style              drawfile_path_style;
  63. typedef struct drawfile_font_table              drawfile_font_table;
  64. typedef struct drawfile_text                    drawfile_text;
  65. typedef struct drawfile_path                    drawfile_path;
  66. typedef struct drawfile_path_with_pattern       drawfile_path_with_pattern;
  67. typedef struct drawfile_sprite                  drawfile_sprite;
  68. typedef struct drawfile_group                   drawfile_group;
  69. typedef struct drawfile_tagged                  drawfile_tagged;
  70. typedef struct drawfile_text_column             drawfile_text_column;
  71. typedef struct drawfile_text_column_list        drawfile_text_column_list;
  72. typedef struct drawfile_area_text               drawfile_area_text;
  73. typedef struct drawfile_text_area               drawfile_text_area;
  74. typedef struct drawfile_options                 drawfile_options;
  75. typedef struct drawfile_trfm_text               drawfile_trfm_text;
  76. typedef struct drawfile_trfm_sprite             drawfile_trfm_sprite;
  77. typedef struct drawfile_jpeg                    drawfile_jpeg;
  78. typedef struct drawfile_object                  drawfile_object;
  79. typedef struct drawfile_diagram                 drawfile_diagram;
  80. typedef struct drawfile_render_state            drawfile_render_state;
  81. typedef struct drawfile_declare_fonts_state     drawfile_declare_fonts_state;
  82.  
  83. /********************
  84.  * Type definitions *
  85.  ********************/
  86. typedef int drawfile_type;
  87.  
  88. typedef byte drawfile_path_style_flags;
  89.  
  90. typedef bits drawfile_text_flags;
  91.  
  92. typedef bits drawfile_render_flags;
  93.  
  94. typedef bits drawfile_declare_fonts_flags;
  95.  
  96. typedef bits drawfile_paper_options;
  97.  
  98. typedef bits drawfile_entry_mode;
  99.  
  100. struct drawfile_font_def
  101.    {  byte font_index;
  102.       char font_name [UNKNOWN];
  103.    };
  104.  
  105. #define drawfile_FONT_DEF(N) \
  106.    struct \
  107.       {  byte font_index; \
  108.          char font_name [N]; \
  109.       }
  110.  
  111. #define drawfile_SIZEOF_FONT_DEF(N) \
  112.    (offsetof (drawfile_font_def, font_name) + \
  113.          (N)*sizeof ((drawfile_font_def *) NULL)->font_name)
  114.  
  115. struct drawfile_text_style
  116.    {  byte font_index;
  117.       byte reserved [3];
  118.    };
  119.  
  120. struct drawfile_path_style
  121.    {  drawfile_path_style_flags flags;
  122.       byte reserved;
  123.       byte cap_width;
  124.       byte cap_length;
  125.    };
  126.  
  127. struct drawfile_font_table
  128.    {  drawfile_font_def font_def [UNKNOWN];
  129.    };
  130.  
  131. struct drawfile_text
  132.    {  os_box bbox;
  133.       os_colour fill;
  134.       os_colour bg_hint;
  135.       drawfile_text_style style;
  136.       int xsize;
  137.       int ysize;
  138.       os_coord base;
  139.       char text [UNKNOWN];
  140.    };
  141.  
  142. #define drawfile_TEXT(N) \
  143.    struct \
  144.       {  os_box bbox; \
  145.          os_colour fill; \
  146.          os_colour bg_hint; \
  147.          drawfile_text_style style; \
  148.          int xsize; \
  149.          int ysize; \
  150.          os_coord base; \
  151.          char text [N]; \
  152.       }
  153.  
  154. #define drawfile_SIZEOF_TEXT(N) \
  155.    (offsetof (drawfile_text, text) + \
  156.          (N)*sizeof ((drawfile_text *) NULL)->text)
  157.  
  158. struct drawfile_path
  159.    {  os_box bbox;
  160.       os_colour fill;
  161.       os_colour outline;
  162.       int width;
  163.       drawfile_path_style style;
  164.       draw_path path;
  165.    };
  166.  
  167. struct drawfile_path_with_pattern
  168.    {  os_box bbox;
  169.       os_colour fill;
  170.       os_colour outline;
  171.       int width;
  172.       drawfile_path_style style;
  173.       draw_dash_pattern pattern;
  174.       draw_path path;
  175.    };
  176.  
  177. struct drawfile_sprite
  178.    {  os_box bbox;
  179.       osspriteop_header header;
  180.       byte data [UNKNOWN];
  181.    };
  182.  
  183. #define drawfile_SPRITE(N) \
  184.    struct \
  185.       {  os_box bbox; \
  186.          osspriteop_header header; \
  187.          byte data [N]; \
  188.       }
  189.  
  190. #define drawfile_SIZEOF_SPRITE(N) \
  191.    (offsetof (drawfile_sprite, data) + \
  192.          (N)*sizeof ((drawfile_sprite *) NULL)->data)
  193.  
  194. struct drawfile_group
  195.    {  os_box bbox;
  196.       char name [12];
  197.       int objects [UNKNOWN];
  198.    };
  199.  
  200. #define drawfile_GROUP(N) \
  201.    struct \
  202.       {  os_box bbox; \
  203.          char name [12]; \
  204.          int objects [N]; \
  205.       }
  206.  
  207. #define drawfile_SIZEOF_GROUP(N) \
  208.    (offsetof (drawfile_group, objects) + \
  209.          (N)*sizeof ((drawfile_group *) NULL)->objects)
  210.  
  211. struct drawfile_tagged
  212.    {  os_box bbox;
  213.       drawfile_type tag;
  214.       int object [UNKNOWN];
  215.    };
  216.  
  217. #define drawfile_TAGGED(N) \
  218.    struct \
  219.       {  os_box bbox; \
  220.          drawfile_type tag; \
  221.          int object [N]; \
  222.       }
  223.  
  224. #define drawfile_SIZEOF_TAGGED(N) \
  225.    (offsetof (drawfile_tagged, object) + \
  226.          (N)*sizeof ((drawfile_tagged *) NULL)->object)
  227.  
  228. struct drawfile_text_column
  229.    {  os_box box;
  230.    };
  231.  
  232. struct drawfile_text_column_list
  233.    {  struct
  234.       {  drawfile_type type;
  235.          int size;
  236.          drawfile_text_column data;
  237.       }
  238.       columns [UNKNOWN];
  239.    };
  240.  
  241. #define drawfile_TEXT_COLUMN_LIST(N) \
  242.    struct \
  243.       {  struct \
  244.          {  drawfile_type type; \
  245.             int size; \
  246.             drawfile_text_column data; \
  247.          } \
  248.          columns [N]; \
  249.       }
  250.  
  251. #define drawfile_SIZEOF_TEXT_COLUMN_LIST(N) \
  252.    ((N)*sizeof ((drawfile_text_column_list *) NULL)->columns)
  253.  
  254. struct drawfile_area_text
  255.    {  drawfile_type type;
  256.       int reserved [2];
  257.       os_colour fill;
  258.       os_colour bg_hint;
  259.       char text [UNKNOWN];
  260.    };
  261.  
  262. #define drawfile_AREA_TEXT(N) \
  263.    struct \
  264.       {  drawfile_type type; \
  265.          int reserved [2]; \
  266.          os_colour fill; \
  267.          os_colour bg_hint; \
  268.          char text [N]; \
  269.       }
  270.  
  271. #define drawfile_SIZEOF_AREA_TEXT(N) \
  272.    (offsetof (drawfile_area_text, text) + \
  273.          (N)*sizeof ((drawfile_area_text *) NULL)->text)
  274.  
  275. struct drawfile_text_area
  276.    {  os_box bbox;
  277.       drawfile_text_column_list header;
  278.       drawfile_area_text area_text;
  279.    };
  280.  
  281. struct drawfile_options
  282.    {  os_box bbox;
  283.       int paper_size;
  284.       drawfile_paper_options paper_options;
  285.       float grid_spacing;
  286.       int grid_division;
  287.       bool isometric;
  288.       bool auto_adjust;
  289.       bool show;
  290.       bool lock;
  291.       bool cm;
  292.       int zoom_mul;
  293.       int zoom_div;
  294.       bool zoom_lock;
  295.       bool toolbox;
  296.       drawfile_entry_mode entry_mode;
  297.       int undo_size;
  298.    };
  299.  
  300. struct drawfile_trfm_text
  301.    {  os_box bbox;
  302.       os_trfm trfm;
  303.       drawfile_text_flags flags;
  304.       os_colour fill;
  305.       os_colour bg_hint;
  306.       drawfile_text_style style;
  307.       int xsize;
  308.       int ysize;
  309.       os_coord base;
  310.       char text [UNKNOWN];
  311.    };
  312.  
  313. #define drawfile_TRFM_TEXT(N) \
  314.    struct \
  315.       {  os_box bbox; \
  316.          os_trfm trfm; \
  317.          drawfile_text_flags flags; \
  318.          os_colour fill; \
  319.          os_colour bg_hint; \
  320.          drawfile_text_style style; \
  321.          int xsize; \
  322.          int ysize; \
  323.          os_coord base; \
  324.          char text [N]; \
  325.       }
  326.  
  327. #define drawfile_SIZEOF_TRFM_TEXT(N) \
  328.    (offsetof (drawfile_trfm_text, text) + \
  329.          (N)*sizeof ((drawfile_trfm_text *) NULL)->text)
  330.  
  331. struct drawfile_trfm_sprite
  332.    {  os_box bbox;
  333.       os_trfm trfm;
  334.       osspriteop_header header;
  335.       byte data [UNKNOWN];
  336.    };
  337.  
  338. #define drawfile_TRFM_SPRITE(N) \
  339.    struct \
  340.       {  os_box bbox; \
  341.          os_trfm trfm; \
  342.          osspriteop_header header; \
  343.          byte data [N]; \
  344.       }
  345.  
  346. #define drawfile_SIZEOF_TRFM_SPRITE(N) \
  347.    (offsetof (drawfile_trfm_sprite, data) + \
  348.          (N)*sizeof ((drawfile_trfm_sprite *) NULL)->data)
  349.  
  350. struct drawfile_jpeg
  351.    {  os_box bbox;
  352.       int width;
  353.       int height;
  354.       int xdpi;
  355.       int ydpi;
  356.       os_trfm trfm;
  357.       int len;
  358.       jpeg_image image;
  359.    };
  360.  
  361. /* ------------------------------------------------------------------------
  362.  * Type:          drawfile_object
  363.  *
  364.  * Description:   This type is used to declare pointers rather than objects
  365.  */
  366.  
  367. struct drawfile_object
  368.    {  drawfile_type type;
  369.       int size;
  370.       union
  371.       {  drawfile_font_table font_table;
  372.          drawfile_text text;
  373.          drawfile_path path;
  374.          drawfile_path_with_pattern path_with_pattern;
  375.          drawfile_sprite sprite;
  376.          drawfile_group group;
  377.          drawfile_tagged tagged;
  378.          drawfile_text_column text_column;
  379.          drawfile_text_area text_area;
  380.          drawfile_options options;
  381.          drawfile_trfm_text trfm_text;
  382.          drawfile_trfm_sprite trfm_sprite;
  383.          drawfile_jpeg jpeg;
  384.       }
  385.       data;
  386.    };
  387.  
  388. struct drawfile_diagram
  389.    {  char tag [4];
  390.       int major_version;
  391.       int minor_version;
  392.       char source [12];
  393.       os_box bbox;
  394.       drawfile_object objects [UNKNOWN];
  395.    };
  396.  
  397. typedef bits drawfile_bbox_flags;
  398.  
  399. struct drawfile_render_state
  400.    {  drawfile_object *object;
  401.       drawfile_diagram *diagram;
  402.       drawfile_object *font_table;
  403.       drawfile_render_flags flags;
  404.       os_trfm *trfm;
  405.       os_box *clip;
  406.       int flatness;
  407.       os_error *error;
  408.    };
  409.  
  410. struct drawfile_declare_fonts_state
  411.    {  drawfile_object *object;
  412.       drawfile_diagram *diagram;
  413.       drawfile_object *font_table;
  414.       drawfile_declare_fonts_flags flags;
  415.       os_error *error;
  416.    };
  417.  
  418. /************************
  419.  * Constant definitions *
  420.  ************************/
  421. #define error_DRAW_FILE_NOT_DRAW                0x20C00u
  422. #define error_DRAW_FILE_VERSION                 0x20C01u
  423. #define error_DRAW_FILE_FONT_TAB                0x20C02u
  424. #define error_DRAW_FILE_BAD_FONT_NO             0x20C03u
  425. #define error_DRAW_FILE_BAD_MODE                0x20C04u
  426. #define error_DRAW_FILE_BAD_FILE                0x20C05u
  427. #define error_DRAW_FILE_BAD_GROUP               0x20C06u
  428. #define error_DRAW_FILE_BAD_TAG                 0x20C07u
  429. #define error_DRAW_FILE_SYNTAX                  0x20C08u
  430. #define error_DRAW_FILE_FONT_NO                 0x20C09u
  431. #define error_DRAW_FILE_AREA_VER                0x20C0Au
  432. #define error_DRAW_FILE_NO_AREA_VER             0x20C0Bu
  433. #define drawfile_TYPE_FONT_TABLE                ((drawfile_type) 0x0u)
  434. #define drawfile_TYPE_TEXT                      ((drawfile_type) 0x1u)
  435. #define drawfile_TYPE_PATH                      ((drawfile_type) 0x2u)
  436. #define drawfile_TYPE_SPRITE                    ((drawfile_type) 0x5u)
  437. #define drawfile_TYPE_GROUP                     ((drawfile_type) 0x6u)
  438. #define drawfile_TYPE_TAGGED                    ((drawfile_type) 0x7u)
  439. #define drawfile_TYPE_TEXT_AREA                 ((drawfile_type) 0x9u)
  440. #define drawfile_TYPE_TEXT_COLUMN               ((drawfile_type) 0xAu)
  441. #define drawfile_TYPE_OPTIONS                   ((drawfile_type) 0xBu)
  442. #define drawfile_TYPE_TRFM_TEXT                 ((drawfile_type) 0xCu)
  443. #define drawfile_TYPE_TRFM_SPRITE               ((drawfile_type) 0xDu)
  444. #define drawfile_TYPE_JPEG                      ((drawfile_type) 0x10u)
  445. #define drawfile_PATH_MITRED                    ((drawfile_path_style_flags) 0x0u)
  446. #define drawfile_PATH_ROUND                     ((drawfile_path_style_flags) 0x1u)
  447. #define drawfile_PATH_BEVELLED                  ((drawfile_path_style_flags) 0x2u)
  448. #define drawfile_PATH_BUTT                      ((drawfile_path_style_flags) 0x0u)
  449. #define drawfile_PATH_SQUARE                    ((drawfile_path_style_flags) 0x2u)
  450. #define drawfile_PATH_TRIANGLE                  ((drawfile_path_style_flags) 0x3u)
  451. #define drawfile_PATH_JOIN_SHIFT                0
  452. #define drawfile_PATH_JOIN                      ((drawfile_path_style_flags) 0x3u)
  453. #define drawfile_PATH_END_SHIFT                 2
  454. #define drawfile_PATH_END                       ((drawfile_path_style_flags) 0xCu)
  455. #define drawfile_PATH_START_SHIFT               4
  456. #define drawfile_PATH_START                     ((drawfile_path_style_flags) 0x30u)
  457. #define drawfile_PATH_WINDING_EVEN_ODD          ((drawfile_path_style_flags) 0x40u)
  458. #define drawfile_PATH_DASHED                    ((drawfile_path_style_flags) 0x80u)
  459. #define drawfile_PATH_CAP_WIDTH_SHIFT           16
  460. #define drawfile_PATH_CAP_WIDTH                 ((drawfile_path_style_flags) 0xFF0000u)
  461. #define drawfile_PATH_CAP_LENGTH_SHIFT          24
  462. #define drawfile_PATH_CAP_LENGTH                ((drawfile_path_style_flags) 0xFF000000u)
  463. #define drawfile_TEXT_KERN                      ((drawfile_text_flags) 0x1u)
  464. #define drawfile_TEXT_RIGHT_TO_LEFT             ((drawfile_text_flags) 0x2u)
  465. #define drawfile_TEXT_UNDERLINE                 ((drawfile_text_flags) 0x4u)
  466. #define drawfile_RENDER_BBOXES                  ((drawfile_render_flags) 0x1u)
  467. #define drawfile_RENDER_SUPPRESS                ((drawfile_render_flags) 0x2u)
  468. #define drawfile_RENDER_GIVEN_FLATNESS          ((drawfile_render_flags) 0x4u)
  469. #define drawfile_NO_DOWNLOAD                    ((drawfile_declare_fonts_flags) 0x1u)
  470. #define drawfile_PAPER_SHOW                     ((drawfile_paper_options) 0x1u)
  471. #define drawfile_PAPER_LANDSCAPE                ((drawfile_paper_options) 0x10u)
  472. #define drawfile_PAPER_DEFAULT                  ((drawfile_paper_options) 0x100u)
  473. #define drawfile_ENTRY_MODE_LINE                ((drawfile_entry_mode) 0x1u)
  474. #define drawfile_ENTRY_MODE_CLOSED_LINE         ((drawfile_entry_mode) 0x2u)
  475. #define drawfile_ENTRY_MODE_CURVE               ((drawfile_entry_mode) 0x4u)
  476. #define drawfile_ENTRY_MODE_CLOSED_CURVE        ((drawfile_entry_mode) 0x8u)
  477. #define drawfile_ENTRY_MODE_RECTANGLE           ((drawfile_entry_mode) 0x10u)
  478. #define drawfile_ENTRY_MODE_ELLIPSE             ((drawfile_entry_mode) 0x20u)
  479. #define drawfile_ENTRY_MODE_TEXT_LINE           ((drawfile_entry_mode) 0x40u)
  480. #define drawfile_ENTRY_MODE_SELECT              ((drawfile_entry_mode) 0x80u)
  481.  
  482. /*************************
  483.  * Function declarations *
  484.  *************************/
  485.  
  486. #ifdef __cplusplus
  487.    extern "C" {
  488. #endif
  489.  
  490. /* ------------------------------------------------------------------------
  491.  * Function:      drawfile_render()
  492.  *
  493.  * Description:   Calls SWI 0x45540
  494.  *
  495.  * Input:         flags - value of R0 on entry
  496.  *                diagram - value of R1 on entry
  497.  *                size - value of R2 on entry
  498.  *                trfm - value of R3 on entry
  499.  *                clip - value of R4 on entry
  500.  *                flatness - value of R5 on entry
  501.  */
  502.  
  503. extern os_error *xdrawfile_render (drawfile_render_flags flags,
  504.       drawfile_diagram const *diagram,
  505.       int size,
  506.       os_trfm const *trfm,
  507.       os_box const *clip,
  508.       int flatness);
  509. extern void drawfile_render (drawfile_render_flags flags,
  510.       drawfile_diagram const *diagram,
  511.       int size,
  512.       os_trfm const *trfm,
  513.       os_box const *clip,
  514.       int flatness);
  515.  
  516. /* ------------------------------------------------------------------------
  517.  * Function:      drawfile_bbox()
  518.  *
  519.  * Description:   Calls SWI 0x45541
  520.  *
  521.  * Input:         flags - value of R0 on entry
  522.  *                diagram - value of R1 on entry
  523.  *                size - value of R2 on entry
  524.  *                trfm - value of R3 on entry
  525.  *                bbox - value of R4 on entry
  526.  */
  527.  
  528. extern os_error *xdrawfile_bbox (drawfile_bbox_flags flags,
  529.       drawfile_diagram const *diagram,
  530.       int size,
  531.       os_trfm const *trfm,
  532.       os_box *bbox);
  533. extern void drawfile_bbox (drawfile_bbox_flags flags,
  534.       drawfile_diagram const *diagram,
  535.       int size,
  536.       os_trfm const *trfm,
  537.       os_box *bbox);
  538.  
  539. /* ------------------------------------------------------------------------
  540.  * Function:      drawfile_declare_fonts()
  541.  *
  542.  * Description:   Calls SWI 0x45542
  543.  *
  544.  * Input:         flags - value of R0 on entry
  545.  *                diagram - value of R1 on entry
  546.  *                size - value of R2 on entry
  547.  */
  548.  
  549. extern os_error *xdrawfile_declare_fonts (drawfile_declare_fonts_flags flags,
  550.       drawfile_diagram const *diagram,
  551.       int size);
  552. __swi (0x45542) void drawfile_declare_fonts (drawfile_declare_fonts_flags flags,
  553.       drawfile_diagram const *diagram,
  554.       int size);
  555.  
  556. /* ------------------------------------------------------------------------
  557.  * Function:      service_draw_object_render()
  558.  *
  559.  * Description:   Render unknown Draw object in Draw file
  560.  *
  561.  * Input:         type - value of R0 on entry
  562.  *                state - value of R2 on entry
  563.  *
  564.  * Output:        unclaimed - value of R1 on exit (X version only)
  565.  *
  566.  * Returns:       R1 (non-X version only)
  567.  *
  568.  * Other notes:   Calls SWI 0x30 with R1 = 0x45540.
  569.  */
  570.  
  571. extern os_error *xservice_draw_object_render (drawfile_type type,
  572.       drawfile_render_state *state,
  573.       bool *unclaimed);
  574. extern bool service_draw_object_render (drawfile_type type,
  575.       drawfile_render_state *state);
  576.  
  577. /* ------------------------------------------------------------------------
  578.  * Function:      service_draw_object_declare_fonts()
  579.  *
  580.  * Description:   Declare fonts for unknown Draw object in Draw file
  581.  *
  582.  * Input:         type - value of R0 on entry
  583.  *                state - value of R2 on entry
  584.  *
  585.  * Output:        unclaimed - value of R1 on exit (X version only)
  586.  *
  587.  * Returns:       R1 (non-X version only)
  588.  *
  589.  * Other notes:   Calls SWI 0x30 with R1 = 0x45541.
  590.  */
  591.  
  592. extern os_error *xservice_draw_object_declare_fonts (drawfile_type type,
  593.       drawfile_declare_fonts_state *state,
  594.       bool *unclaimed);
  595. extern bool service_draw_object_declare_fonts (drawfile_type type,
  596.       drawfile_declare_fonts_state *state);
  597.  
  598. #ifdef __cplusplus
  599.    }
  600. #endif
  601.  
  602. #endif
  603.