home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / program / lynxlib.zoo / linea.h < prev    next >
Text File  |  1990-12-29  |  23KB  |  582 lines

  1.  
  2.         /***********************************************\
  3.         *                        *
  4.         *                aline.h            *
  5.         *    Common include file for C interface    *
  6.         *    to low level Line A calls        *
  7.         *                   7 Dec 86    *
  8.         *    J.R. Bammi                *
  9.         *      decvax!cwruecmp!bammi            *
  10.         *      bammi%case@csnet-relay.ARPA        *
  11.         *      bammi@case.CSNET            *
  12.         *                        *
  13.         \***********************************************/
  14.  
  15. #define WORD int
  16.  
  17. /***************************************************************\
  18. *                                *
  19. *                Defines                *
  20. *                                *
  21. \***************************************************************/
  22.  
  23. /*
  24.  *  Object colors (default pallette)
  25.  */
  26. #define WHITE    0
  27. #define BLACK    1
  28. #define RED      2
  29. #define GREEN    3
  30. #define BLUE     4
  31. #define CYAN     5
  32. #define YELLOW   6
  33. #define MAGENTA  7
  34. #define LWHITE   8
  35. #define LBLACK   9
  36. #define LRED     10
  37. #define LGREEN   11
  38. #define LBLUE    12
  39. #define LCYAN    13
  40. #define LYELLOW  14
  41. #define LMAGENTA 15
  42.  
  43. /* 
  44.  *  Vdi writing modes
  45.  */
  46. #define MD_REPLACE 1
  47. #define MD_TRANS   2
  48. #define MD_XOR     3
  49. #define MD_ERASE   4
  50.  
  51. /*
  52.  *  Raster Op Codes
  53.  */
  54. #define ALL_WHITE  0
  55. #define S_AND_D    1
  56. #define    S_AND_NOTD 2
  57. #define S_ONLY     3
  58. #define NOTS_AND_D 4
  59. #define    D_ONLY     5
  60. #define S_XOR_D    6
  61. #define S_OR_D     7
  62. #define    NOT_SORD   8
  63. #define    NOT_SXORD  9
  64. #define D_INVERT  10
  65. #define    NOT_D     11
  66. #define    S_OR_NOTD 12
  67. #define NOTS_OR_D 13
  68. #define    NOT_SANDD 14
  69. #define ALL_BLACK 15
  70.  
  71. /*
  72.  *  Sprite formats
  73.  */
  74. #define SP_VDI        0
  75. #define SP_XOR        1
  76.  
  77. /*
  78.  * Line A Opcodes
  79.  *
  80.  */
  81. #define    INIT        0
  82. #define PUTPIXEL    1
  83. #define GETPIXEL    2
  84. #define LINE        3
  85. #define HLINE        4
  86. #define RECTANGLE    5
  87. #define FPOLYGON    6
  88. #define BITBLT        7
  89. #define TEXTBLT        8
  90. #define SHOWMOUSE    9
  91. #define HIDEMOUSE    10
  92. #define TRANMOUSE    11
  93. #define USPRITE        12
  94. #define DSPRITE        13
  95. #define CPYRASTER    14
  96. #define FSEEDFILL    15    /* ROM TOS only    */
  97.  
  98.  
  99. /***************************************************************\
  100. *                                *
  101. *            Types                    *
  102. *                                *
  103. \***************************************************************/
  104.  
  105. /*
  106.  * A pointer to the type LINEA is returned by the Line A init call
  107.  * ($A000), in registers A0 and D0.
  108.  * This pointer is saved in the global variable 'linea'.
  109.  */
  110. typedef struct {
  111.  
  112. /* Type    Name       Offset   Function            Comments              */
  113. /* --------------------------------------------------------------------   */
  114. WORD    vplanes;  /*  0  # of Planes     Also see CurrRez                 */
  115. WORD    vwrap;    /*  2  Bytes / scan line    "    "    "                 */
  116.           /*     VWRAP can be changed to implement special effects*/
  117.           /*     Doubling VWRAP will skip every other scan line   */
  118.           /*                              */
  119. WORD    *contrl;  /*  4  Ptr to CONTRL Array  Contrl gets set to this     */
  120. WORD    *intin;   /*  8  Ptr to INTIN  Array  Intin  gets set to this     */
  121. WORD    *ptsin;   /* 12  Ptr to PTSIN  Array  Ptsin  gets set to this     */
  122. WORD    *intout;  /* 16  Ptr to INTOUT Array  Intout gets set to this     */
  123. WORD    *ptsout;  /* 20  Ptr to PTSOUT Array  Ptsout gets set to this     */
  124.           /*     CONTRL is the control array                  */
  125.           /*     INTIN is the array of input parameters          */
  126.           /*     PTSIN is the array of input coordinates          */
  127.           /*      Even entrys are X coordinate              */
  128.           /*       Odd  entrys are corresponding Y coodinates      */
  129.           /*     INTOUT is the array of output parameters         */
  130.           /*     PTSOUT is the array of output coordinates        */
  131.           /*     organizes like PTSIN                  */
  132.           /*                              */
  133. WORD    colbit0;  /* 24  Plane 0 Color Value  All Three Rez's              */
  134. WORD    colbit1;  /* 26  Plane 1 Color Value  Med and Low Rez only      */
  135. WORD    colbit2;  /* 28  Plane 2 Color Value  Low Rez only           */
  136. WORD    colbit3;  /* 30  Plane 3 Color Value  Low Rez Only           */
  137.           /*     Foreground color COLBIT0 + 2*COLBIT1 + 4*COLBIT2 */
  138.           /*                  + 8*COLBIT3              */
  139.           /*                              */
  140.           /*                                                      */
  141. WORD    lstlin;   /* 32  Always set to -1, Done for you in Init_Aline     */
  142.           /*     Does anyone know what it is supposed to be?      */
  143.           /*                               */
  144. WORD    lnmask;   /* 34  Linemask used when drawing lines, same as Vdi's  */
  145.           /*     line style                                       */
  146.           /*                              */
  147. WORD    wmode;    /* 36  Writing mode                                     */
  148.           /*     0=Replace Mode-Replace all bits in Dest with src */
  149.           /*     1=Trans. Mode-Only additional bits in src set(OR)*/
  150.           /*     2=Xor Mode- Src XOR Dest              */
  151.           /*     3=Inverse Trans.- (NOT src) Or Dest              */
  152.           /*     Values upto 16 are permitted                     */
  153.           /*                              */
  154. WORD    x1;      /* 38  X1 coordinate used in various calls              */
  155.           /*                              */
  156. WORD    y1;       /* 40  Y1 coordinate used in various calls              */
  157.           /*                              */
  158. WORD    x2;       /* 42  X2 coordinate used in various calls              */
  159.           /*                              */
  160. WORD    y2;       /* 44  Y2 coordinate used in various calls              */
  161.           /*                              */
  162.           /*                                                      */
  163. WORD    *patptr;  /* 46  Pointer to current fill pattern                  */
  164.                   /*     Must be integral power of 2 (words) in length    */
  165. WORD    patmsk;   /* 50  I don't know why they call it a mask. It is in   */
  166.           /*     reality the length in words of the current patt. */
  167. WORD    mfill;    /* 52  Multi Plane fill flag 1 == Current fill Pattern  */
  168.           /*     is for Muti Plane.                               */
  169.           /*                                                      */
  170.           /*                                                      */
  171. WORD    clip;     /* 54  Clipping Flag 1 == TRUE                          */
  172. WORD    xmincl;   /* 56  Min X of clipping window              */
  173. WORD    ymincl;   /* 58  Min Y of clipping window                         */
  174. WORD    xmaxcl;   /* 60  Max X of clipping window              */
  175. WORD    ymaxcl;   /* 62  Max Y of clipping window                         */
  176.           /*                                                      */
  177.           /*                                                      */
  178. WORD    xdda;      /* 64  Accumulator for Scaling, Must be set to 0x08000  */
  179.           /*     before each call to Text Blt. Done for you in    */
  180.           /*     in aline_text()                                  */
  181. WORD    ddainc;   /* 66  Scaling factor - Fractional amount to scale char */
  182.           /*     When scaling up = 256 *(Size-Textsize)/Textsize  */
  183.           /*     When scaling down = 256*(Size)/Textsize          */
  184.           /*     scaling down does not work                       */
  185. WORD    scaldir;  /* 68  Scaling direction 0 == down                      */
  186. WORD    mono;     /* 70  Mono flag 0== current font is a propotional font */
  187.           /*     Its Ok for Thickening to increase the width of   */
  188.           /*     the current character.                           */
  189.           /*     1 == current font is mono spaced, so thickening  */
  190.           /*     may not increase the width of the current char   */
  191.           /*                                                      */
  192. WORD    sourcex;  /* 72  X coordinate of character in the font form       */
  193.           /*     SOURCEX is caluclated from info in the font      */
  194.           /*     header for the current font (see FONT_HEAD type) */
  195.           /*     SOURCEX = off_table[char-first_ade]              */
  196.           /*     SOURCEX is calculated for you in aline_text()    */
  197.           /*     The pointer to a table of font header for the    */
  198.           /*     internal fonts is returned in A2 on init (A000)  */
  199. WORD    sourcey;  /* 74  Y coodinate of character in the font form        */
  200.           /*     Typically set to 0 (top line of font form)      */
  201. WORD    destx;    /* 76  X coordinate of character on screen              */
  202. WORD    desty;    /* 78  Y coordinate of character on screen              */
  203. WORD    delx;     /* 80  Width of Character                  */
  204.           /*     Difference between two SOURCEX's              */
  205. WORD    dely;     /* 82  Height of Character                              */
  206.           /*     form_height field of FONT_HEAD of current font   */
  207. WORD    *fbase;   /* 84  Pointer to start of font form                    */
  208. WORD    fwidth;   /* 88  Width of the current font's form                 */
  209.           /*                                                      */
  210. WORD    style;    /* 90  Vector of style flags                      */
  211.           /*     Bit 0 = Thicken Flag                      */
  212.           /*     Bit 1 = Lighten Flag                      */
  213.           /*     Bit 2 = Skewing Flag                      */
  214.           /*     Bit 3 = Underline Flag (ignored)          */
  215.           /*     Bit 4 = Outline Flag                  */
  216.           /*                                                      */
  217. WORD    litemask; /* 92  Mask used for lightening text                    */
  218.           /*     The Mask is picked up from the font header       */
  219. WORD    skewmask; /* 94  Mask used for skewing text              */
  220.           /*     The Mask is picked up from the font header       */
  221. WORD    weight;   /* 96  The number of bits by which to thicken text      */
  222.           /*     The number is picked up from the font header     */
  223. WORD    roff;     /* 98  Offset above baseline when skewing               */
  224.           /*     Again picked up from the font header             */
  225. WORD    loff;     /* 100 Offset below character baseline when skewing     */
  226.           /*     Again picked up from the font header             */
  227.           /*                                                      */
  228. WORD    scale;    /* 102 Scaling Flag 1 == true                           */
  229.           /*                                                      */
  230. WORD    chup;      /* 104 Character rotation vector.                       */
  231.           /*     0 = normal (0 degrees)                  */
  232.           /*     1800 = 180 degrees                  */
  233.           /*     2700 = 270 degrees                               */
  234.           /*                                                      */
  235. WORD    textfg;   /* 106 Text foreground color                        */
  236.           /*                                                      */
  237. char    *scrtchp; /* 108 Address of buffer required for creating special  */
  238.           /*     text effects. The size of this buffer should be  */
  239.           /*     1K according the Internals. The Atari document   */
  240.           /*     of course does not talk about such things :-)    */
  241.           /*                                                      */
  242. WORD    scrpt2;   /* 112 The offset of the scaling buffer buffer in above */
  243.           /*     buffer. Internals suggests an offset of 0x0040   */
  244.           /*     As usual the Atari document does'nt say a thing  */
  245.           /*                                                      */
  246. WORD    textbg;   /* 114 Text background color (Ram Vdi only)             */
  247.           /*     used for the BitBlt writing modes (4-19) only    */
  248.           /*                                                      */
  249. WORD    copytran; /* 116 Copy raster form type flag (Ram vdi only)        */
  250.           /*     0 => Opaque type                                 */
  251.           /*          n-plane source  ->  n-plane dest            */
  252.           /*              BitBlt writing modes (4-19)             */
  253.           /*    ~0 => Transparent type                            */
  254.           /*          1-plane source  ->  n-plane dest            */
  255.           /*              Vdi writing modes (1-3)                 */
  256.           /*                                                      */
  257. WORD(*seedabort)(); /* 118 Pointer to function returning int, which is    */
  258.           /*     called by the fill logic to allow the fill to    */
  259.           /*     be aborted. If the routine returns FALSE (0)     */
  260.           /*     the fill is not aborted. If it returns TRUE (~0) */
  261.           /*     the fill is aborted                              */
  262. /* ---------------------------------------------------------------------- */
  263.  
  264. } LINEA;        /*       P H E W !!!!!        */
  265.  
  266.  
  267. /*
  268.  * Global Variables at negative offsets from the Line A parameter
  269.  * block address returned by init.
  270.  *
  271.  * Offset    Type    Description
  272.  * ------------------------------------------------------
  273.  * -4         W    Max Y pixel screen value
  274.  * -6         W    Text Status byte
  275.  * -10         L    Font offset table address
  276.  * -12         W    Max X pixel screen value
  277.  * -14         W    Font Width
  278.  * -16         W    First font ASCII code (first_ade)
  279.  * -18         W    Last  font ASCII code (last_ade )
  280.  * -22         L    Font address
  281.  * -23         B    Cursor countdown timer
  282.  * -24         B    Cursor flash interval
  283.  * -26         W    Y cursor position
  284.  * -28           W    X cursor position
  285.  * -30         W    Offset to first cell
  286.  * -34         L    Current cursor address
  287.  * -36         W    Foreground color index
  288.  * -38         W    Background color index
  289.  * -40         W    Offset to next cell
  290.  * -42           W    Max cells high - 1
  291.  * -44         W    Max cells across - 1
  292.  * -46         W    Cell height in pixels
  293.  * -------------------------------------------------
  294.  */
  295.  
  296. /*
  297.  *  Atari did'nt specify any names for these variables
  298.  *  so I invented them!
  299.  */
  300. typedef struct {    /* NEG_LINEA */
  301.     WORD cellheight;    /* -46 */
  302.     WORD cellsacross;    /* -44 */
  303.     WORD cellshigh;        /* -42 */
  304.     WORD noffset;        /* -40 */
  305.     WORD bgcolor;        /* -38 */
  306.     WORD fgcolor;        /* -36 */
  307.     char *curaddress;    /* -34 */
  308.     WORD fstoffset;        /* -30 */
  309.     WORD cury;        /* -28 */
  310.     WORD curx;        /* -26 */
  311.     char curinterval;    /* -24 */
  312.     char curtimer;        /* -23 */
  313.     char *fontdata;        /* -22 */
  314.     WORD lastade;        /* -18 */
  315.     WORD firstade;        /* -16 */
  316.     WORD fontwidth;        /* -14 */
  317.     WORD maxx;        /* -12 */
  318.     char *fontoftable;    /* -10 */
  319.     WORD textstatus;    /* -6 */
  320.     WORD maxy;        /* -4 */
  321.     WORD filler;        /* -2 Totally undocumented location */
  322. } NEG_LINEA;
  323.  
  324. /*
  325. #define MAXY        *((WORD  *)((char  *)aline + (char  *) -4L))
  326. #define TEXTSTATUS    *((WORD  *)((char  *)aline + (char  *) -6L))
  327. #define FONTOFFTABLE    *((char **)((char **)aline + (char **)-10L))
  328. #define MAXX        *((WORD  *)((char  *)aline + (char  *)-12L))
  329. #define FONTWIDTH    *((WORD  *)((char  *)aline + (char  *)-14L))
  330. #define FIRSTADE    *((WORD  *)((char  *)aline + (char  *)-16L))
  331. #define    LASTADE        *((WORD  *)((char  *)aline + (char  *)-18L))
  332. #define FONTDATA    *((char **)((char **)aline + (char **)-22L))
  333. #define    CURTIMER    *((char  *)((char  *)aline + (char  *)-23L))
  334. #define CURINTERVAL    *((char  *)((char  *)aline + (char  *)-24L))
  335. #define CURX        *((WORD  *)((char  *)aline + (char  *)-26L))
  336. #define    CURY        *((WORD  *)((char  *)aline + (char  *)-28L))
  337. #define    FSTOFFSET    *((WORD  *)((char  *)aline + (char  *)-30L))
  338. #define    CURADDRESS    *((char **)((char **)aline + (char **)-34L))
  339. #define    FGCOLOR        *((WORD  *)((char  *)aline + (char  *)-36L))
  340. #define    BGCOLOR        *((WORD  *)((char  *)aline + (char  *)-38L))
  341. #define    NOFFSET        *((WORD  *)((char  *)aline + (char  *)-40L))
  342. #define    CELLSHIGH    *((WORD  *)((char  *)aline + (char  *)-42L))
  343. #define    CELLSACROSS    *((WORD  *)((char  *)aline + (char  *)-44L))
  344. #define    CELLHEIGHT    *((WORD  *)((char  *)aline + (char  *)-46L))
  345. */
  346.  
  347. /*
  348.  *  A pointer to array of type FONT is returned by the Line A init call
  349.  *  ($A000), in regsister A1.
  350.  *  This pointer is saved in the global array variable 'fnt'.
  351.  */
  352.  
  353. typedef struct _font {
  354.  
  355. /* Type    Name       Offset   Function            Comments            */
  356. /* -----------------------------------------------------------------------  */
  357. WORD    face_id;    /*  0 Font face identifier  1 == system font            */
  358.             /*                                */
  359. WORD    size;       /*  2 Font size in points                               */
  360.             /*                                */
  361. char    name[32];   /*  4 Face name                        */
  362.             /*                                */
  363. WORD    first_ade;  /* 36 Lowest ADE value in the face (lowest ASCII value  */
  364.             /*    of displayable character).                        */
  365.             /*                                */
  366. WORD    last_ade;   /* 38 Highest ADE value in the face (highest ASCII value*/
  367.             /*    of displayable character).                        */
  368.             /*                                */
  369. WORD    top;        /* 40 Distance of top line relative to baseline         */
  370.             /*                                */
  371. WORD    ascent;     /* 42 Distance of ascent line relative to baseline      */
  372.             /*                                */
  373. WORD    half;       /* 44 Distance of half line relative to baseline        */
  374.             /*                                */
  375. WORD    descent;    /* 46 Distance of decent line relative to baseline      */
  376.             /*                                */
  377. WORD    bottom;     /* 48 Distance of bottom line relative to baseline      */
  378.             /*    All distances are measured in absolute values     */
  379.             /*    rather than as offsets. They are always +ve       */
  380.             /*                                */
  381. WORD    wchar;      /* 50 Width of the widest character in font             */
  382.             /*                                */
  383. WORD    wcell;      /* 52 Width of the widest cell character cell in face   */
  384.             /*                                */
  385. WORD    left_off;   /* 54 Left Offset see Vdi appendix G                    */
  386.             /*                                */
  387. WORD    right_off;  /* 56 Right offset   "      "     "                     */
  388.             /*                                */
  389. WORD    thicken;    /* 58 Number of pixels by which to thicken characters   */
  390.             /*                                */
  391. WORD    underline;  /* 60 Width in  pixels of the underline                 */
  392.             /*                                */
  393. WORD    lighten;    /* 62 The mask used to lighten characters               */
  394.             /*                                */
  395. WORD    skew;       /* 64 The mask used to determine when to perform        */
  396.             /*    additional rotation on the character to perform   */
  397.             /*    skewing                                           */
  398.             /*                                */
  399. WORD    flags;      /* 66 Flags                                             */
  400.             /*      bit 0 set if default system font                */
  401.             /*      bit 1 set if horiz offset table should be used  */
  402.             /*      bit 2 byte-swap flag (thanks to Intel idiots)   */
  403.             /*      bit 3 set if mono spaced font                   */
  404.             /*                                */
  405. WORD    *h_offset;  /* 68 Pointer to horizontal offset table                */
  406.             /*                                */
  407. WORD    *off_table; /* 72 Pointer to character offset table                 */
  408.             /*                                */
  409. char    *data;      /* 76 Pointer to font data                              */
  410.             /*                                */
  411. WORD    width;      /* 80 Form width (#of bytes /scanline in font data)     */
  412.             /*                                */
  413. WORD    height;     /* 82 Form height (#of scanlines in font data)          */
  414.             /*                                */
  415. struct    font *next; /* 84 Pointer to next font in face                */
  416.             /*                                */
  417. /* -----------------------------------------------------------------------  */
  418.  
  419. } FONT;
  420.  
  421.     
  422. /*
  423.  *  OP_TAB type required for Bit Blt parameter block.
  424.  *  each entry defines the logic operation to apply for
  425.  *  the 4 Fore/Back ground bit combinations
  426.  */
  427. typedef struct {
  428.  
  429. /* Type    Name       Offset   Function            Comments          */
  430. /* ------------------------------------------------------------------ */
  431. char   fg0bg0;     /* 0    Logic op to employ when both FG and BG are 0  */
  432. char   fg0bg1;     /* 1    Logic op to employ when FG = 0 and BG = 1     */
  433. char   fg1bg0;     /* 2    Logic op to employ when FG = 1 and BG = 0     */
  434. char   fg1bg1;     /* 3    Logic op to employ when both FG and BG are 1  */
  435. /* ------------------------------------------------------------------ */
  436.  
  437. } OP_TAB;
  438.  
  439.  
  440. /*
  441.  * Source and destination description blocks
  442.  */
  443. typedef struct  {
  444.     WORD    bl_xmin;    /* Minimum x            */
  445.     WORD    bl_ymin;    /* Minimum y             */
  446.     char    *bl_form;    /* Word aligned memory form     */
  447.     WORD    bl_nxwd;    /* Offset to next word in line  */
  448.     WORD     bl_nxln;    /* Offset to next line in plane */
  449.     WORD     bl_nxpl;    /* Offset to next plane     */
  450. }SDDB;
  451.  
  452. /* Offsets to next word in plane */
  453.  
  454. #define HI_NXWD        2
  455. #define MED_NXWD    4
  456. #define LOW_NXWD    8
  457.  
  458. /* Scan line widths of the screen */
  459.  
  460. #define HI_NXLN        80
  461. #define MED_NXLN    160
  462. #define LOW_NXLN    160
  463.  
  464. /*
  465.  *  Offsets between planes - always the same due to
  466.  *  the way the STs video memory is laid out
  467.  */
  468. #define NXPL        2
  469.  
  470. /* 
  471.  *  Bit Blt Parameter Block Type (for function $A007)
  472.  */
  473.  
  474. typedef struct {
  475.  
  476. /* Type    Name           Offset   Function            Comments  */
  477. /* -----------------------------------------------------------------  */
  478. WORD    bb_b_wd;     /*     width of block in pixels               */
  479. WORD    bb_b_ht;     /*     height of block in pixels              */
  480. WORD    bb_plane_ct; /*     number of planes to blit               */
  481. WORD    bb_fg_col;   /*     foreground color                   */
  482. WORD    bb_bg_col;   /*     back    ground color                   */
  483. OP_TAB    bb_op_tab;   /*     logic for fg x bg combination               */
  484. SDDB    bb_s;        /*     source info block                  */
  485. SDDB    bb_d;        /*     destination info block               */
  486. WORD    *bb_p_addr;  /*     pattern buffer address               */
  487. WORD    bb_p_nxln;   /*     offset to next line in pattern           */
  488. WORD    bb_p_nxpl;   /*     offset to next plane in pattern           */
  489. WORD    bb_p_mask;   /*     pattern index mask                   */
  490. char    bb_fill[24]; /*     work space                      */
  491. /* -----------------------------------------------------------------  */
  492.  
  493. } BBPB;
  494.  
  495.  
  496. /*
  497.  * Memory Form Definition Block
  498.  *
  499.  */
  500. typedef struct
  501.  
  502. {
  503. char    *fd_addr;    /* Addrerss of upper left corner of first */
  504.              /* plane of raster area. If NULL then     */
  505.              /* MFDB is for a physical device          */
  506. WORD    fd_w;         /* Form Width in Pixels                   */
  507. WORD    fd_h;        /* Form Height in Pixels                  */
  508. WORD    fd_wdwidth;  /* Form Width in words (fd_w/sizeof(int)) */
  509. WORD    fd_stand;    /* Form format 0= device spec 1=standard  */
  510. WORD    fd_nplanes;  /* Number of memory planes                */
  511. WORD    fd_r1;       /* Reserved                   */
  512. WORD    fd_r2;       /* Reserved                   */
  513. WORD    fd_r3;       /* Reserved                   */
  514.  
  515. } MFDB;
  516.  
  517.  
  518.  
  519.  
  520. /*
  521.  *  Sprite definition block
  522.  */
  523. typedef struct
  524.  
  525. {
  526. WORD    sp_xhot;        /* Offset to X hot spot        */
  527. WORD    sp_yhot;        /* Offset to Y hot spot        */
  528. WORD    sp_format;        /* Format SP_VDI or SP_XOR     */
  529. WORD    sp_bg;            /* Background color        */
  530. WORD    sp_fg;            /* Foregroud color        */
  531. WORD    sp_data[32];        /* Sprite data -         */
  532.                 /* Alternating words of back/fore */
  533.                 /* ground data            */
  534.                 /* Note that:            */
  535.                 /*   sprite save block is    */
  536.                 /*  10+VPLANES*64 bytes long    */
  537.  
  538. } SFORM;
  539.  
  540.  
  541. /*
  542.  * Macros for the most reasonable linea functions.
  543.  * All the rest require a long discussion.
  544.  */
  545.  
  546. /***********************************************************************\
  547. *                                    *
  548. *        Macros for some Line A functions            *
  549. *                                    *
  550. \***********************************************************************/
  551.  
  552. #define putpixel(x,y,v)    ((PTSIN[0]=x),(PTSIN[1]=y),(INTIN[0]=v),linea1())
  553. #define getpixel(x,y)    ((PTSIN[0]=x),(PTSIN[1]=y),linea2())
  554. #define SABORT_FUNC    funcs[FSEEDFILL]
  555.  
  556. /***********************************************************************\
  557. *                                    *
  558. *            Global Variables                *
  559. *                                    *
  560. \***********************************************************************/
  561.  
  562. /*
  563.  *  Global Variables are defined in alglobal.c, extern every where else
  564.  */
  565. #ifndef ALGLOBAL
  566.  
  567. extern LINEA *aline; /* Pointer to line a param block returned by init */
  568.  
  569. extern FONT  *fonts[]; /* Array of pointers to the three system font */
  570.                /* headers returned by init (in register A1)  */
  571.  
  572. extern WORD  (*funcs[])(); /* Array of pointers to the 15 line a    */
  573.                /* functions returned by init (in        */
  574.                /* register A2) only valid in ROM'ed TOS */
  575. #endif
  576. /* ALGLOBAL */
  577.  
  578. extern LINEA *Ainit();
  579. extern Arectfill();
  580.  
  581. /*** EOF  ***/
  582.