⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawfile.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
/* * 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 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -