home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / gfx / edit / tsmorph / src / tsmorph.h < prev    next >
C/C++ Source or Header  |  1994-02-25  |  29KB  |  1,064 lines

  1. // TSMorph - Amiga Morphing program
  2. // Copyright (C) © 1993  Topicsave Limited
  3.  
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // any later version.
  8.  
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13.  
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. // mpaddock@cix.compulink.co.uk
  19.  
  20. #ifndef TSMORPH_H
  21. #define TSMORPH_H
  22.  
  23. /* All the Amiga stuff    */
  24. #define INTUI_V36_NAMES_ONLY
  25. #define INTUITION_IOBSOLETE_H
  26. #include <exec/types.h>
  27. #include <exec/memory.h>
  28. #include <exec/execbase.h>
  29. #include <intuition/intuition.h>
  30. #include <intuition/intuitionbase.h>
  31. #include <intuition/classes.h>
  32. #include <intuition/classusr.h>
  33. #include <intuition/gadgetclass.h>
  34. #include <intuition/imageclass.h>
  35. #include <intuition/icclass.h>
  36. #include <devices/input.h>
  37. #include <workbench/workbench.h>
  38. #include <workbench/startup.h>
  39. #include <libraries/gadtools.h>
  40. #include <graphics/scale.h>
  41. #include <libraries/asl.h>
  42. #include <libraries/amigaguide.h>
  43. #include <libraries/reqtools.h>
  44. #include <libraries/dctv.h>
  45.  
  46. /* Various stuff is not defined in 2.02 headers    */
  47. #ifndef PGA_NewLook
  48. #define PGA_NewLook (PGA_Dummy + 0x000A)
  49. #endif
  50.  
  51. #ifndef GTMN_FullMenu
  52. #define GTMN_FullMenu GT_TagBase+62
  53. #endif
  54.  
  55. #ifndef WA_MenuHelp
  56. #define WA_MenuHelp (WA_Dummy + 0x2F)
  57. #endif    
  58.  
  59. #ifndef WA_NewLookMenus
  60. #define WA_NewLookMenus (WA_Dummy + 0x30)
  61. #endif
  62.  
  63. #ifndef GTMN_NewLookMenus
  64. #define GTMN_NewLookMenus GT_TagBase+67
  65. #endif
  66.  
  67. #ifndef STRINGA_ExitHelp
  68. #define STRINGA_ExitHelp (STRINGA_Dummy + 0x0013)
  69. #endif
  70.  
  71. #ifndef GT_Underscore
  72. #define GT_Underscore GT_TagBase+64
  73. #endif
  74.  
  75. #ifndef IDCMP_GADGETHELP
  76. #define IDCMP_GADGETHELP 0x04000000
  77. #endif
  78.  
  79. #if INCLUDE_VERSION < 39
  80. void HelpControl(struct Window *w,ULONG flags);
  81. #pragma libcall IntuitionBase HelpControl 33C 0802
  82. void SetRGB32( struct ViewPort *vp, unsigned long n, unsigned long r, unsigned long g,unsigned long b);
  83. #pragma libcall GfxBase SetRGB32 354 3210805
  84. void GetRGB32( struct ColorMap *cm, unsigned long firstcolor,unsigned long ncolors, ULONG *table);
  85. #pragma libcall GfxBase GetRGB32 384 910804
  86. #endif
  87.  
  88. #ifndef HC_GADGETHELP
  89. #define HC_GADGETHELP 1
  90. #endif
  91.  
  92. #ifndef SA_Interleaved
  93. #define SA_Interleaved (SA_Dummy + 0x0022)
  94. #endif
  95.  
  96. /* prototypes    */
  97. #include <clib/exec_protos.h>
  98. #include <clib/dos_protos.h>
  99. #include <clib/layers_protos.h>
  100. #include <clib/graphics_protos.h>
  101. #include <clib/intuition_protos.h>
  102. #include <clib/input_protos.h>
  103. #include <clib/gadtools_protos.h>
  104. #include <clib/asl_protos.h>
  105. #include <clib/utility_protos.h>
  106. #include <clib/diskfont_protos.h>
  107. #include <clib/icon_protos.h>
  108. #include <clib/amigaguide_protos.h>
  109. #define LIBRARIES_MATHFFP_H    // Do not include other math stuff
  110. #include <clib/alib_protos.h>
  111. #include <clib/reqtools_protos.h>
  112. #include <clib/dctv_protos.h>
  113.  
  114. /* Pragmas    */
  115. #include <pragmas/exec_pragmas.h>
  116. #include <pragmas/dos_pragmas.h>
  117. #include <pragmas/layers_pragmas.h>
  118. #include <pragmas/graphics_pragmas.h>
  119. #include <pragmas/intuition_pragmas.h>
  120. #include <pragmas/input_pragmas.h>
  121. #include <pragmas/gadtools_pragmas.h>
  122. #include <pragmas/asl_pragmas.h>
  123. #include <pragmas/utility_pragmas.h>
  124. #include <pragmas/diskfont_pragmas.h>
  125. #include <pragmas/icon_pragmas.h>
  126. #include <pragmas/amigaguide_pragmas.h>
  127. #include <pragmas/reqtools.h>
  128. #include <pragmas/dctv_pragmas.h>
  129.  
  130. #include <rexx/errors.h>
  131. #include <pragmas/rexxsyslib_pragmas.h>
  132. #include <clib/rexxsyslib_protos.h>
  133.  
  134. /* 2.02 Icon headers    */
  135. #if INCLUDE_VERSION < 37
  136. BOOL DeleteDiskObject(UBYTE *name);
  137. #pragma libcall IconBase DeleteDiskObject 8A 801
  138. #endif
  139.  
  140. /* Below is not in the 2.02 version of clib/utility_protos.h
  141.                                        pragmas/utility_pragmas.h */
  142. #if INCLUDE_VERSION < 37
  143. LONG Stricmp(UBYTE *string1,UBYTE *string2);
  144. #pragma libcall UtilityBase Stricmp A2 9802
  145. #endif
  146.  
  147. /* Standard headers    */
  148. #include <stddef.h>
  149. #include <string.h>
  150. #include <stdio.h>
  151. #include <math.h>
  152.  
  153. /* OpalVision            */
  154. #include <opal/opallib.h>
  155.  
  156. /* EGS                    */
  157. #include <egs/clib/egs_protos.h>
  158. #include <egs/pragmas/egs_pragmas.h>
  159. #include <egs/clib/egsintui_protos.h>
  160. #include <egs/pragmas/egsintui_pragmas.h>
  161. #include <egs/clib/egsgfx_protos.h>
  162. #include <egs/pragmas/egsgfx_pragmas.h>
  163. #include <egs/clib/egsrequest_protos.h>
  164. #include <egs/pragmas/egsrequest_pragmas.h>
  165. #include <egs/egsintui.h>
  166. extern struct Library *EGSIntuiBase;
  167. extern struct Library *EGSGfxBase;
  168. extern struct Library *EGSBase;
  169. extern struct Library *EGSRequestBase;
  170.  
  171. /* define max if not already defined    */
  172. #ifndef max
  173. #define max(a,b) ((a)>(b)?(a):(b))
  174. #endif
  175.  
  176. /* IFF stuff                    */
  177. #include "iffp/ILBMapp.h"
  178.  
  179. /* GUI stuff from GadTools    */
  180. #include "gui.h"
  181.  
  182. /* Message keys                */
  183. #include "Messages.h"
  184.  
  185. /* defines for the IDs of the gadgets in the control window    */
  186. #define ONEGADGET        1
  187. #define TWOGADGET        2
  188. #define RELGADGET        3
  189. #define ADDGADGET        4
  190. #define DELGADGET        5
  191. #define LINKGADGET    6
  192. #define UNLINKGADGET    7
  193. #define NONEGADGET    8
  194. #define STGADGET        9
  195. #define PREVGADGET    10
  196. #define GOTOGADGET    11
  197. #define NEXTGADGET    12
  198. #define LASTGADGET    13
  199.  
  200. /* Defined externally    */
  201. extern struct DosLibrary *DOSBase;
  202. extern struct ExecBase *SysBase;
  203.  
  204. /*    Structure definitions    */
  205.  
  206. /* Picture structure
  207.  * This holds all information for a picture displayed in a window
  208.  */
  209. struct Picture {                        // Structure used for each picture
  210.     struct Screen        *Screen;        // Screen to display on
  211.     struct Window        *Win;            // Window
  212.     struct EI_Window    *EGS_Win;    // EGS Window
  213.     struct E_EBitMap    *EGS_BitMap;//    EGS Bitmap
  214.     struct DrawInfo    *DRI;            // Draw Info
  215.     struct Gadget        *BotGad;        // Bottom slider gadget
  216.     struct Gadget        *SideGad;    // Side slider gadget
  217.     struct Gadget        *Lgad;        // Left arrow gadget
  218.     struct Gadget        *Rgad;        // Right arrow gadget
  219.     struct Gadget        *Ugad;        // Up arrow gadget
  220.     struct Gadget        *Dgad;        // Down arrow gadget
  221.     struct Image        *Limage;        // Left arrow
  222.     struct Image        *Rimage;        // Right arrow
  223.     struct Image        *Uimage;        // Up arrow
  224.     struct Image        *Dimage;        // Down arrow
  225.     UWORD                    Left;            // Left edge
  226.     UWORD                    Top;            // Top edge
  227.     UWORD                    XLeft;        // Old left edge
  228.     UWORD                    XTop;            // Old top edge
  229.     UWORD                    ALeft;        // Left movement 10% of window
  230.     UWORD                    ATop;            // down movement 10% of window
  231.     UWORD                    MLeft;        // Max left edge
  232.     UWORD                    MTop;            // Max top edge
  233.     struct ILBMInfo    *ilbm;        // ILBM info for iff read
  234.     UWORD                    currentg;    // Current gadgetID
  235.     char                    *filename;    // For Window title
  236.     ULONG                    JustSeconds;//    Time window was activated - to ignore first click
  237.     struct BitMap        BitMap;        // The zoomed image bitmap
  238.     struct BitScaleArgs BitScaleArgs;    // For zooming image
  239.     BOOL                    Opal;            // Set if opened by OpalLoad
  240.     struct {
  241.         WORD                Left;            // Window Zoom tags - nothing to do with Zoom
  242.         WORD                Top;
  243.         WORD                Width;
  244.         WORD                Height;
  245.     } Zoom;
  246.     UWORD                    width;        // both only valid when EGS
  247.     UWORD                    height;
  248. };
  249.  
  250. #define MAX_LINKS 16
  251.  
  252. /* Point structure
  253.  * Holds all information for each point
  254.  */
  255. struct MyPoint {
  256.     struct MinNode MyNode;                // Node to link in a list
  257.     WORD x,y;                                // Coordinates in the 1st image
  258.     WORD x1,y1;                                // Coordinates in the 2nd image
  259.     WORD    NumLinks;                        // Number of links on this point
  260.     struct MyPoint *p[MAX_LINKS];        // Pointers to up to MAX_LINKS linked points
  261. };
  262.  
  263. /* Structure for size of system gadgets
  264.  * based on Screen resolution
  265.  * This enables windows to open with correct
  266.  * gadgets on lo-res screens
  267.  */
  268. struct gadgetsizing {
  269.     ULONG sysisize;        // tag for SYSISIZE_???RES
  270.     int sizeimagew;
  271.     int sizeimageh;
  272.     int leftimagew;
  273.     int leftimageh;
  274.     int downimagew;
  275.     int downimageh;
  276.     int rightimagew;
  277.     int rightimageh;
  278.     int upimagew;
  279.     int upimageh;
  280.     int closeimagew;
  281.     int zoomimagew;
  282.     int depthimagew;
  283.     int vscrollw;
  284.     int vscrolll;
  285. };
  286.  
  287. /* Macro for finding gadget    */
  288. #define PointInBox(x,y,mx,my,MX,MY) ((x>=mx)&&(y>=my)&&(x<=MX)&