mirror of
https://github.com/simon987/antiword.git
synced 2025-04-10 13:06:41 +00:00
434 lines
12 KiB
C
434 lines
12 KiB
C
/*
|
|
* drawfile.h
|
|
* Copyright (C) 2005 A.J. van Os; Released under GNU GPL
|
|
*
|
|
* Description:
|
|
* Include file to deal with drawfiles
|
|
*
|
|
* Based on:
|
|
* C header file for DrawFile
|
|
* written by DefMod (May 4 2004) on Tue May 4 13:34:17 2004
|
|
* Jonathan Coxhead, jonathan@doves.demon.co.uk, 21 Aug 1995
|
|
* OSLib---efficient, type-safe, transparent, extensible,
|
|
* register-safe A P I coverage of RISC O S
|
|
* Copyright (C) 1994 Jonathan Coxhead
|
|
*
|
|
* All credit should go to him, but all the bugs are mine
|
|
*/
|
|
|
|
#if !defined(__drawfile_h)
|
|
#define __drawfile_h
|
|
|
|
#include "DeskLib:Sprite.h"
|
|
#include "DeskLib:Wimp.h"
|
|
|
|
#if !defined(BOOL)
|
|
#define BOOL int
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
#endif /* !BOOL */
|
|
|
|
/*********************
|
|
* Conversion macros *
|
|
*********************/
|
|
#define Drawfile_DrawToScreen(i) ((i) / 256)
|
|
#define Drawfile_ScreenToDraw(i) ((i) * 256)
|
|
|
|
/**********************************
|
|
* SWI names and SWI reason codes *
|
|
**********************************/
|
|
#define DrawFile_Render 0x45540
|
|
#define DrawFile_BBox 0x45541
|
|
#define DrawFile_DeclareFonts 0x45542
|
|
|
|
/********************
|
|
* Type definitions *
|
|
********************/
|
|
typedef unsigned int bits;
|
|
typedef unsigned char byte;
|
|
|
|
typedef byte drawfile_fontref;
|
|
|
|
typedef byte drawfile_path_style_flags;
|
|
|
|
typedef bits drawfile_text_flags;
|
|
|
|
typedef bits drawfile_render_flags;
|
|
|
|
typedef bits drawfile_declare_fonts_flags;
|
|
|
|
typedef bits drawfile_paper_options;
|
|
|
|
typedef bits drawfile_entry_mode;
|
|
|
|
typedef enum {
|
|
drawfile_TYPE_FONT_TABLE = 0,
|
|
drawfile_TYPE_TEXT = 1,
|
|
drawfile_TYPE_PATH = 2,
|
|
drawfile_TYPE_SPRITE = 5,
|
|
drawfile_TYPE_GROUP = 6,
|
|
drawfile_TYPE_TAGGED = 7,
|
|
drawfile_TYPE_TEXT_AREA = 9,
|
|
drawfile_TYPE_TEXT_COLUMN = 10,
|
|
drawfile_TYPE_OPTIONS = 11,
|
|
drawfile_TYPE_TRFM_TEXT = 12,
|
|
drawfile_TYPE_TRFM_SPRITE = 13,
|
|
drawfile_TYPE_JPEG = 16
|
|
} drawfile_type;
|
|
|
|
typedef enum {
|
|
drawfile_PATH_END_PATH = 0,
|
|
drawfile_PATH_CONTINUATION = 1,
|
|
drawfile_PATH_MOVE_TO = 2,
|
|
drawfile_PATH_SPECIAL_MOVE_TO = 3,
|
|
drawfile_PATH_CLOSE_GAP = 4,
|
|
drawfile_PATH_CLOSE_LINE = 5,
|
|
drawfile_PATH_BEZIER_TO = 6,
|
|
drawfile_PATH_GAP_TO = 7,
|
|
drawfile_PATH_LINE_TO = 8
|
|
} drawfile_path_type;
|
|
|
|
typedef struct {
|
|
int start;
|
|
int element_count;
|
|
int elements [6];
|
|
} draw_dash_pattern;
|
|
|
|
typedef struct {
|
|
int entries [3] [2];
|
|
} os_trfm;
|
|
|
|
typedef struct {
|
|
void *data;
|
|
size_t length;
|
|
} drawfile_info;
|
|
|
|
typedef struct {
|
|
drawfile_fontref font_ref;
|
|
char font_name [1];
|
|
} drawfile_font_def;
|
|
|
|
typedef struct {
|
|
drawfile_fontref font_ref;
|
|
byte reserved [3];
|
|
} drawfile_text_style;
|
|
|
|
typedef struct {
|
|
drawfile_path_style_flags flags;
|
|
byte reserved;
|
|
byte cap_width;
|
|
byte cap_length;
|
|
} drawfile_path_style;
|
|
|
|
typedef struct {
|
|
drawfile_font_def font_def[1];
|
|
} drawfile_font_table;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
palette_entry fill;
|
|
palette_entry bg_hint;
|
|
drawfile_text_style style;
|
|
int xsize;
|
|
int ysize;
|
|
wimp_coord base;
|
|
char text [1];
|
|
} drawfile_text;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
palette_entry fill;
|
|
palette_entry outline;
|
|
int width;
|
|
drawfile_path_style style;
|
|
int path [1];
|
|
} drawfile_path;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
palette_entry fill;
|
|
palette_entry outline;
|
|
int width;
|
|
drawfile_path_style style;
|
|
draw_dash_pattern pattern;
|
|
int path [1];
|
|
} drawfile_path_with_pattern;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
sprite_header header;
|
|
byte data [1];
|
|
} drawfile_sprite;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
char name [12];
|
|
int objects [1];
|
|
} drawfile_group;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
drawfile_type tag;
|
|
int object [1];
|
|
} drawfile_tagged;
|
|
|
|
typedef struct {
|
|
wimp_box box;
|
|
} drawfile_text_column;
|
|
|
|
typedef struct {
|
|
struct {
|
|
drawfile_type type;
|
|
int size;
|
|
drawfile_text_column data;
|
|
} columns [1];
|
|
} drawfile_text_column_list;
|
|
|
|
typedef struct {
|
|
drawfile_type type;
|
|
int reserved [2];
|
|
palette_entry fill;
|
|
palette_entry bg_hint;
|
|
char text [1];
|
|
} drawfile_area_text;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
drawfile_text_column_list header;
|
|
drawfile_area_text area_text;
|
|
} drawfile_text_area;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
int paper_size;
|
|
drawfile_paper_options paper_options;
|
|
double grid_spacing;
|
|
int grid_division;
|
|
BOOL isometric;
|
|
BOOL auto_adjust;
|
|
BOOL show;
|
|
BOOL lock;
|
|
BOOL cm;
|
|
int zoom_mul;
|
|
int zoom_div;
|
|
BOOL zoom_lock;
|
|
BOOL toolbox;
|
|
drawfile_entry_mode entry_mode;
|
|
int undo_size;
|
|
} drawfile_options;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
os_trfm trfm;
|
|
drawfile_text_flags flags;
|
|
palette_entry fill;
|
|
palette_entry bg_hint;
|
|
drawfile_text_style style;
|
|
int xsize;
|
|
int ysize;
|
|
wimp_coord base;
|
|
char text [1];
|
|
} drawfile_trfm_text;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
os_trfm trfm;
|
|
sprite_header header;
|
|
byte data [1];
|
|
} drawfile_trfm_sprite;
|
|
|
|
typedef struct {
|
|
wimp_box bbox;
|
|
int width;
|
|
int height;
|
|
int xdpi;
|
|
int ydpi;
|
|
os_trfm trfm;
|
|
int len;
|
|
byte data [1];
|
|
} drawfile_jpeg;
|
|
|
|
/* ------------------------------------------------------------------------
|
|
* Type: drawfile_object
|
|
*
|
|
* Description: This type is used to declare pointers rather than objects
|
|
*/
|
|
|
|
typedef struct {
|
|
drawfile_type type;
|
|
int size;
|
|
union {
|
|
drawfile_font_table font_table;
|
|
drawfile_text text;
|
|
drawfile_path path;
|
|
drawfile_path_with_pattern path_with_pattern;
|
|
drawfile_sprite sprite;
|
|
drawfile_group group;
|
|
drawfile_tagged tagged;
|
|
drawfile_text_column text_column;
|
|
drawfile_text_area text_area;
|
|
drawfile_options options;
|
|
drawfile_trfm_text trfm_text;
|
|
drawfile_trfm_sprite trfm_sprite;
|
|
drawfile_jpeg jpeg;
|
|
} data;
|
|
} drawfile_object;
|
|
|
|
typedef struct {
|
|
char tag [4];
|
|
int major_version;
|
|
int minor_version;
|
|
char source [12];
|
|
wimp_box bbox;
|
|
drawfile_object objects [1];
|
|
} drawfile_diagram;
|
|
|
|
typedef bits drawfile_bbox_flags;
|
|
|
|
typedef struct {
|
|
drawfile_object *object;
|
|
drawfile_diagram *diagram;
|
|
drawfile_object *font_table;
|
|
drawfile_declare_fonts_flags flags;
|
|
os_error *error;
|
|
} drawfile_declare_fonts_state;
|
|
|
|
/************************
|
|
* Constant definitions *
|
|
************************/
|
|
#define error_DRAW_FILE_NOT_DRAW 0x20C00u
|
|
#define error_DRAW_FILE_VERSION 0x20C01u
|
|
#define error_DRAW_FILE_FONT_TAB 0x20C02u
|
|
#define error_DRAW_FILE_BAD_FONT_NO 0x20C03u
|
|
#define error_DRAW_FILE_BAD_MODE 0x20C04u
|
|
#define error_DRAW_FILE_BAD_FILE 0x20C05u
|
|
#define error_DRAW_FILE_BAD_GROUP 0x20C06u
|
|
#define error_DRAW_FILE_BAD_TAG 0x20C07u
|
|
#define error_DRAW_FILE_SYNTAX 0x20C08u
|
|
#define error_DRAW_FILE_FONT_NO 0x20C09u
|
|
#define error_DRAW_FILE_AREA_VER 0x20C0Au
|
|
#define error_DRAW_FILE_NO_AREA_VER 0x20C0Bu
|
|
|
|
#define drawfile_PATH_MITRED ((drawfile_path_style_flags) 0x0u)
|
|
#define drawfile_PATH_ROUND ((drawfile_path_style_flags) 0x1u)
|
|
#define drawfile_PATH_BEVELLED ((drawfile_path_style_flags) 0x2u)
|
|
#define drawfile_PATH_BUTT ((drawfile_path_style_flags) 0x0u)
|
|
#define drawfile_PATH_SQUARE ((drawfile_path_style_flags) 0x2u)
|
|
#define drawfile_PATH_TRIANGLE ((drawfile_path_style_flags) 0x3u)
|
|
#define drawfile_PATH_JOIN_SHIFT 0
|
|
#define drawfile_PATH_JOIN ((drawfile_path_style_flags) 0x3u)
|
|
#define drawfile_PATH_END_SHIFT 2
|
|
#define drawfile_PATH_END ((drawfile_path_style_flags) 0xCu)
|
|
#define drawfile_PATH_START_SHIFT 4
|
|
#define drawfile_PATH_START ((drawfile_path_style_flags) 0x30u)
|
|
#define drawfile_PATH_WINDING_EVEN_ODD ((drawfile_path_style_flags) 0x40u)
|
|
#define drawfile_PATH_DASHED ((drawfile_path_style_flags) 0x80u)
|
|
#define drawfile_PATH_CAP_WIDTH_SHIFT 16
|
|
#define drawfile_PATH_CAP_WIDTH ((drawfile_path_style_flags) 0xFF0000u)
|
|
#define drawfile_PATH_CAP_LENGTH_SHIFT 24
|
|
#define drawfile_PATH_CAP_LENGTH ((drawfile_path_style_flags) 0xFF000000u)
|
|
#define drawfile_TEXT_KERN ((drawfile_text_flags) 0x1u)
|
|
#define drawfile_TEXT_RIGHT_TO_LEFT ((drawfile_text_flags) 0x2u)
|
|
#define drawfile_TEXT_UNDERLINE ((drawfile_text_flags) 0x4u)
|
|
#define drawfile_RENDER_BBOXES ((drawfile_render_flags) 0x1u)
|
|
#define drawfile_RENDER_SUPPRESS ((drawfile_render_flags) 0x2u)
|
|
#define drawfile_RENDER_GIVEN_FLATNESS ((drawfile_render_flags) 0x4u)
|
|
#define drawfile_RENDER_GIVEN_COLOUR_MAPPING ((drawfile_render_flags) 0x8u)
|
|
#define drawfile_NO_DOWNLOAD ((drawfile_declare_fonts_flags) 0x1u)
|
|
#define drawfile_PAPER_SHOW ((drawfile_paper_options) 0x1u)
|
|
#define drawfile_PAPER_LANDSCAPE ((drawfile_paper_options) 0x10u)
|
|
#define drawfile_PAPER_DEFAULT ((drawfile_paper_options) 0x100u)
|
|
#define drawfile_ENTRY_MODE_LINE ((drawfile_entry_mode) 0x1u)
|
|
#define drawfile_ENTRY_MODE_CLOSED_LINE ((drawfile_entry_mode) 0x2u)
|
|
#define drawfile_ENTRY_MODE_CURVE ((drawfile_entry_mode) 0x4u)
|
|
#define drawfile_ENTRY_MODE_CLOSED_CURVE ((drawfile_entry_mode) 0x8u)
|
|
#define drawfile_ENTRY_MODE_RECTANGLE ((drawfile_entry_mode) 0x10u)
|
|
#define drawfile_ENTRY_MODE_ELLIPSE ((drawfile_entry_mode) 0x20u)
|
|
#define drawfile_ENTRY_MODE_TEXT_LINE ((drawfile_entry_mode) 0x40u)
|
|
#define drawfile_ENTRY_MODE_SELECT ((drawfile_entry_mode) 0x80u)
|
|
|
|
/*************************
|
|
* Function declarations *
|
|
*************************/
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
/* ------------------------------------------------------------------------
|
|
* Function: drawfile_render()
|
|
*
|
|
* Description: Calls SWI 0x45540
|
|
*
|
|
* Input: flags - value of R0 on entry
|
|
* diagram - value of R1 on entry
|
|
* size - value of R2 on entry
|
|
* trfm - value of R3 on entry
|
|
* clip - value of R4 on entry
|
|
* flatness - value of R5 on entry
|
|
*/
|
|
|
|
extern os_error *Drawfile_Render (drawfile_render_flags flags,
|
|
drawfile_diagram const *diagram,
|
|
int size,
|
|
os_trfm const *trfm,
|
|
wimp_box const *clip,
|
|
int flatness);
|
|
|
|
/* ------------------------------------------------------------------------
|
|
* Function: drawfile_bbox()
|
|
*
|
|
* Description: Calls SWI 0x45541
|
|
*
|
|
* Input: flags - value of R0 on entry
|
|
* diagram - value of R1 on entry
|
|
* size - value of R2 on entry
|
|
* trfm - value of R3 on entry
|
|
* bbox - value of R4 on entry
|
|
*/
|
|
|
|
extern os_error *Drawfile_Bbox (drawfile_bbox_flags flags,
|
|
drawfile_diagram const *diagram,
|
|
int size,
|
|
os_trfm const *trfm,
|
|
wimp_box *bbox);
|
|
|
|
/* ------------------------------------------------------------------------
|
|
* Function: Drawfile_DeclareFonts()
|
|
*
|
|
* Description: Calls SWI 0x45542
|
|
*
|
|
* Input: flags - value of R0 on entry
|
|
* diagram - value of R1 on entry
|
|
* size - value of R2 on entry
|
|
*/
|
|
|
|
extern os_error *Drawfile_DeclareFonts (drawfile_declare_fonts_flags flags,
|
|
drawfile_diagram const *diagram,
|
|
int size);
|
|
|
|
/* ------------------------------------------------------------------------
|
|
* Function: Drawfile_CreateDiagram()
|
|
*
|
|
*/
|
|
|
|
extern os_error * Drawfile_CreateDiagram(drawfile_info *info, size_t memory,
|
|
const char *creator, wimp_box box);
|
|
|
|
extern os_error *Drawfile_AppendObject(drawfile_info *info, size_t memory,
|
|
const drawfile_object *object, BOOL rebind);
|
|
|
|
extern os_error *Drawfile_RenderDiagram(drawfile_info *info,
|
|
window_redrawblock *redraw, double scale);
|
|
|
|
extern os_error *Drawfile_VerifyDiagram(drawfile_info *info);
|
|
|
|
extern void Drawfile_QueryBox(drawfile_info *info,
|
|
wimp_box *rect, BOOL screenUnits);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* __drawfile.h */
|