home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 2 / DATAFILE_PDCD2.iso / utilities2 / desklib / !DeskLib / h / Sprite < prev    next >
Encoding:
Text File  |  1993-07-11  |  6.8 KB  |  215 lines

  1. /*
  2.     ####             #    #     # #
  3.     #   #            #    #       #          The FreeWare C library for 
  4.     #   #  ##   ###  #  # #     # ###             RISC OS machines
  5.     #   # #  # #     # #  #     # #  #   ___________________________________
  6.     #   # ####  ###  ##   #     # #  #                                      
  7.     #   # #        # # #  #     # #  #    Please refer to the accompanying
  8.     ####   ### ####  #  # ##### # ###    documentation for conditions of use
  9.     ________________________________________________________________________
  10.  
  11.     File:    Sprite.h
  12.     Author:  Copyright © 1992, 1993 John Winters and Jason Williams
  13.     Version: 0.25 (11 May 1993)
  14.     Purpose: Sprite-SWI interfaces.
  15.              This version of the Sprite library only includes the most common
  16.              sprite operations, and only on "user" sprite areas, and "named"
  17.              sprites. (i.e. not pointers-to-sprites)
  18.              More Sprite operations may appear as the moderator gets time
  19.              to include them into the library.
  20. */
  21.  
  22.  
  23. #ifndef __dl_sprite_h
  24. #define __dl_sprite_h
  25.  
  26. #ifndef __dl_core_h
  27. #include "Core.h"
  28. #endif
  29.  
  30. #ifndef __dl_wimp_h
  31. #include "Wimp.h"
  32. #endif
  33.  
  34.  
  35. #define sprite_MAXNAME    12
  36.  
  37. #define spritepool_SYSTEM 0
  38. #define spritepool_WIMP   1
  39.  
  40. typedef struct sprite_info     *sprite;
  41. typedef struct sprite_areainfo *sprite_area;
  42.  
  43. typedef struct {
  44.     int          callno ;
  45.     sprite_area  spritearea ;
  46.     sprite       sprite ;
  47.     void         *savearea ;
  48. } sprite_outputstate ;
  49.  
  50. typedef struct {
  51.     unsigned int areasize ;
  52.     unsigned int numsprites ;
  53.     unsigned int firstoffset ;
  54.     unsigned int freeoffset ;
  55. } sprite_areainfo ;
  56.  
  57. typedef struct {
  58.     unsigned int width ;
  59.     unsigned int height ;
  60.     unsigned int maskstatus ;
  61.     unsigned int mode ;
  62. } sprite_info ;
  63.  
  64.  
  65. typedef struct
  66. {
  67.   int  offset_next;
  68.   char name[sprite_MAXNAME];
  69.   int  width;
  70.   int  height;
  71.   int  leftbit;
  72.   int  rightbit;
  73.   int  imageoffset;
  74.   int  maskoffset;
  75.   int  screenmode;
  76. } sprite_header;
  77.  
  78.  
  79.  /* Save the screen as a sprite file - SpriteOp 2 */
  80. extern os_error *Sprite_ScreenSave(char *filename, BOOL savepalette);
  81.  
  82.  
  83.  /* ScreenLoad a sprite file - SpriteOp 3 */
  84. extern os_error *Sprite_ScreenLoad(char *filename);
  85.  
  86.  /* Initialise a sprite area - SpriteOp 9 */
  87. extern os_error *Sprite_InitArea(sprite_area area);
  88.  
  89.  /* Load a file into a sprite area - SpriteOp 10 */
  90. extern os_error *Sprite_Load(sprite_area area, char *filename) ;
  91.  
  92.  /* Merge a file into a sprite area - SpriteOp 11 */
  93. extern os_error *Sprite_Merge(sprite_area area, char *filename);
  94.  
  95.  /* Save a sprite area into a file - SpriteOp 12 */
  96. extern os_error *Sprite_Save(sprite_area area, char *filename);
  97.  
  98.  
  99. /*
  100.  *  Sprite_Create() - SpriteOp 15
  101.  *    Creates a sprite according to the parameters.
  102.  */
  103. extern os_error *Sprite_Create(sprite_area area, char *name, int haspalette,
  104.                                int width, int height, int screenmode);
  105.  
  106. /*
  107.  *  Sprite_Delete() - SpriteOp 25
  108.  *    Deletes the given sprite
  109.  */
  110. extern os_error *Sprite_Delete(sprite_area area, char *name);
  111.  
  112.  
  113. /*
  114.  *  Sprite_Rename() and Sprite_Copy() - SpriteOps 25, 26
  115.  *    Unsurprisingly, these rename and copy a sprite, respectively.
  116.  */
  117. extern os_error *Sprite_Rename(sprite_area area, char *oldname, char *newname);
  118. extern os_error *Sprite_Copy(sprite_area area, char *oldname, char *newname);
  119.  
  120.  
  121. /*
  122.  *  Sprite_Get() - SpriteOp 16
  123.  *    Gets (creates and copies) a sprite from the given screen rectangle
  124.  */
  125. extern os_error *Sprite_Get(sprite_area area, char *name, int with_palette,
  126.                             int left, int bottom, int right, int top,
  127.                             sprite *sprite_ptr);
  128.  
  129. /*
  130.  *  Sprite_Plot() - SpriteOp 34
  131.  *    Plots a sprite with it's bottom-left corners at the given coordinate,
  132.  *    using the given GCOL plot action (see GFX.h for plot actions)
  133.  */
  134. extern os_error *Sprite_Plot(sprite_area area, char *name,  /* "PutUser" */
  135.                              int x, int y, int plot_action);
  136.  
  137.  
  138.  /* Reads sprite information - SpriteOp 40 */
  139. extern os_error *Sprite_ReadInfo(sprite_area area, char *name,
  140.                                  sprite_info *info);
  141.  
  142.  /* redirects VDU output into the named sprite - SpriteOp 60 */
  143. extern os_error *Sprite_Redirect(sprite_area area, char *name,
  144.                                  void *savearea, sprite_outputstate *oldstate);
  145.  
  146.  /* Un-redirects VDU output back to the saved state - SpriteOp 60 */
  147. extern os_error *Sprite_UnRedirect(sprite_outputstate *oldstate);
  148.  
  149.  
  150.  /*  Sprite_ReadSaveAreaSize
  151.   *  Given a sprite area and a sprite name, returns the save area size needed
  152.   *  for the given sprite. (SpriteOp 62 veneer)
  153.   */
  154. extern os_error *Sprite_ReadSaveAreaSize(sprite_area area, char *name,
  155.                                          int *saveareasize);
  156.  
  157.  
  158. /* Sprite manipulation functions ------------------------------------------ */
  159.  
  160. typedef enum
  161. {
  162.   sprite_HASNOMASKPAL = 0x00,             /* Sprite has no mask or palette */
  163.   sprite_HASNOPALMASK = 0x00,
  164.   sprite_HASMASK      = 0x01,             /* Sprite has a mask only        */
  165.   sprite_HASPAL       = 0x02,             /* Sprite has a palette only     */
  166.   sprite_HASMASKPAL   = 0x03,             /* Has both mask and palette     */
  167.   sprite_HASPALMASK   = 0x03
  168. } spritemem_flags;
  169.  
  170.  
  171.  /*  Sprite_MemorySize
  172.   *  Returns the amount of memory to malloc to hold the sprite
  173.   *  defined by the parameters.
  174.   *
  175.   *  -- Example, create sprite area large enough for 3 identical sprites
  176.   *     which are mode 12, 34x17, and have their own palettes.
  177.   *
  178.   *    sprite_areainfo *pUserSprites;
  179.   *
  180.   *    size = 3 * Sprite_MemorySize( 34, 17, 12, sprite_HASPAL );
  181.   *    size += sizeof( sprite_areainfo );
  182.   *    pUserSprites = (sprite_areainfo*) malloc( size );
  183.   */
  184.  
  185. extern int Sprite_MemorySize(int width, int height, int mode,
  186.                              spritemem_flags flags);
  187.  
  188.  
  189.  /*  Sprite_IconMemorySize
  190.   *  This takes the given WIMP icon, and calculates the size of the sprite
  191.   *  needed to exactly fill it, by calling Sprite_MemorySize for you.
  192.   *  If 'dimensions' is not NULL, then it will be filled in with the needed
  193.   *  size (width/height) of the sprite in pixels.
  194.   *
  195.   *  The window is passed in as a window_block so that this can be applied
  196.   *  to templates as well as open windows.
  197.   *
  198.   *  Example:
  199.   *  {
  200.   *    window_info winfo;
  201.   *    int         s;
  202.   *
  203.   *    Window_GetInfo(mainwindow, &winfo);
  204.   *    s = Sprite_IconMemorySize(&winfo.block, 5, |* Get info for icon 5    *|
  205.   *                          screen_mode,         |* in current screen mode *|
  206.   *                          sprite_HASNOMASKPAL, |* with no mask/palette   *|
  207.   *                          NULL);               |* Don't return dimensions*|
  208.   */
  209.  
  210. extern int Sprite_IconMemorySize(window_block *pWinBlock, icon_handle icon,
  211.                                  int mode, spritemem_flags flags,
  212.                                  wimp_point *dimensions);
  213.  
  214. #endif
  215.