home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / new / gfx / edit / tsmorph / src / rendersub.c < prev    next >
C/C++ Source or Header  |  1994-02-23  |  25KB  |  972 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. /* Amiga headers */
  21. #define INTUI_V36_NAMES_ONLY
  22. #define INTUITION_IOBSOLETE_H
  23.  
  24. // Include correct math library
  25. #ifdef MY68881
  26. #include <m68881.h>
  27. extern int rand(void);
  28. #else
  29. #ifdef MY68881_6
  30. #include <math.h>
  31. #include <m68881.h>
  32. #define floor(d) __builtin_fpc(0x0003,d)
  33. #else
  34. #include <math.h>
  35. #endif
  36. #endif
  37.  
  38. // prevent inclusion of another math library
  39. #define LIBRARIES_MATHFFP_H
  40.  
  41. // other headers, define some non 2.02 header stuff
  42. #include <exec/types.h>
  43. #include <exec/memory.h>
  44. #include <intuition/intuition.h>
  45. #include <intuition/intuitionbase.h>
  46. #include <intuition/gadgetclass.h>
  47. #ifndef PGA_NewLook
  48. #define PGA_NewLook (PGA_Dummy + 0x000A)
  49. #endif
  50. #include <intuition/imageclass.h>
  51. #include <intuition/icclass.h>
  52. #include <devices/input.h>
  53. #include <workbench/workbench.h>
  54. #include <workbench/startup.h>
  55. #include <libraries/gadtools.h>
  56. #ifndef GTMN_FullMenu
  57. #define GTMN_FullMenu GT_TagBase+62
  58. #endif
  59. #include <libraries/asl.h>
  60.  
  61. #include <clib/exec_protos.h>
  62. #include <clib/dos_protos.h>
  63. #include <clib/layers_protos.h>
  64. #include <clib/graphics_protos.h>
  65. #include <clib/intuition_protos.h>
  66. #include <clib/input_protos.h>
  67. #include <clib/gadtools_protos.h>
  68. #include <clib/asl_protos.h>
  69. #include <clib/utility_protos.h>
  70. #include <clib/alib_protos.h>
  71.  
  72. #include <pragmas/exec_pragmas.h>
  73. #include <pragmas/dos_pragmas.h>
  74. #include <pragmas/layers_pragmas.h>
  75. #include <pragmas/graphics_pragmas.h>
  76. #include <pragmas/intuition_pragmas.h>
  77. #include <pragmas/input_pragmas.h>
  78. #include <pragmas/gadtools_pragmas.h>
  79. #include <pragmas/asl_pragmas.h>
  80. #include <pragmas/utility_pragmas.h>
  81.  
  82. #include <proto/diskfont.h>
  83. #include <proto/icon.h>
  84.  
  85. #include <devices/timer.h>
  86.  
  87. #include <clib/timer_protos.h>
  88. #include <pragmas/timer_pragmas.h>
  89.  
  90. #include <clib/alib_protos.h>
  91.  
  92. #include <rexx/errors.h>
  93. #include <pragmas/rexxsyslib_pragmas.h>
  94. #include <clib/rexxsyslib_protos.h>
  95.  
  96. #include <libraries/amigaguide.h>
  97. #include <clib/amigaguide_protos.h>
  98. #include <pragmas/amigaguide_pragmas.h>
  99.  
  100. #include <libraries/reqtools.h>
  101. #include <clib/reqtools_protos.h>
  102. #include <pragmas/reqtools.h>
  103.  
  104. #include <opal/opallib.h>
  105.  
  106. #include <libraries/dctv.h>
  107. #include <clib/dctv_protos.h>
  108. #include <pragmas/dctv_pragmas.h>
  109.  
  110. #include <libraries/nofrag.h>
  111. #include <clib/nofrag_protos.h>
  112. #ifdef LIBRARIES_NOFRAG_H
  113. #undef LIBRARIES_NOFRAG_H
  114. #endif
  115. #include <pragmas/nofrag_pragmas.h>
  116. #ifndef LIBRARIES_NOFRAG_H
  117. #define LIBRARIES_NOFRAG_H 1
  118. #endif
  119.  
  120. #include <stddef.h>
  121. #include <string.h>
  122. #include <stdio.h>
  123. #include <stdlib.h>
  124.  
  125. /* Below is not in the 2.02 version of clib/utility_protos.h
  126.                                        pragmas/utility_pragmas.h */
  127. #if INCLUDE_VERSION < 37
  128. LONG Stricmp(UBYTE *string1,UBYTE *string2);
  129. #pragma libcall UtilityBase Stricmp A2 9802
  130. #endif
  131.  
  132. // IFF header
  133. #include "iffp/ILBMapp.h"
  134.  
  135. // Progress requester
  136. #include "progress.h"
  137.  
  138. // JPEG load stuff
  139. #include "JPEG_LS/jinclude.h"
  140.  
  141. /* Wait pointer */
  142. static USHORT __chip BusyPointerData[] =
  143. {
  144.    0x0000,0x0000,
  145.    0x0400,0x07C0,0x0000,0x07C0,0x0100,0x0380,0x0000,0x07E0,
  146.    0x07C0,0x1FF8,0x1FF0,0x3FEC,0x3FF8,0x7FDE,0x3FF8,0x7FBE,
  147.    0x7FFC,0xFF7F,0x7EFC,0xFFFF,0x7FFC,0xFFFF,0x3FF8,0x7FFE,
  148.    0x3FF8,0x7FFE,0x1FF0,0x3FFC,0x07C0,0x1FF8,0x0000,0x07E0,
  149.    0x0000,0x0000,
  150. };
  151.  
  152. // Libraries
  153. extern struct ExecBase *SysBase;
  154. extern struct DosLibrary *DOSBase;
  155. extern struct IntuitionBase *IntuitionBase;
  156. extern struct Library  *GfxBase, *LayersBase, *IFFParseBase;
  157. extern struct Library *GadToolsBase, *AslBase, *UtilityBase;
  158. extern struct Library *RexxSysBase;
  159. extern struct Library *AmigaGuideBase;
  160. extern struct Library *TimerBase;
  161. extern struct Library *ReqToolsBase;
  162. extern struct Library *DCTVBase;
  163. extern struct NoFragBase *NoFragBase;
  164.  
  165. extern struct OpalBase *OpalBase;
  166.  
  167. // Help stuff
  168. extern AMIGAGUIDECONTEXT handle;
  169. extern struct NewAmigaGuide nag;
  170. extern ULONG ASig;
  171.  
  172. // nofrag.library stuff
  173. extern struct MemoryChain *Chain;
  174. #define MAXMEM 1000
  175.  
  176. #define H_Help         10
  177. #define H_Library        11
  178. #define H_ESave        12
  179. #define H_AllocVec    13
  180. #define H_OpenPoints    14
  181. #define H_Progress    15
  182. #define H_AllocPlanes 16
  183. #define H_24            17
  184. #define H_Load            18
  185. #define H_AllocIFF    19
  186. #define H_AllocILBM    20
  187. #define H_FileFormat    21
  188. #define H_SizeMatch    22
  189. #define H_Range        23
  190. #define H_MemPointsR    24
  191. #define H_CloseFile    25
  192. #define H_3Points        26
  193. #define H_Open            27
  194. #define H_ARexx        28
  195. #define H_Really        29
  196. #define HE_OldFormat    30
  197. #define HE_OpalVision 31
  198. #define HE_NoOpal        32
  199.  
  200. // 24 bitplane bitmap
  201. struct MyBitMap {
  202.     struct BitMap BitMap;
  203.     PLANEPTR xplanes[16];
  204. };
  205.  
  206. extern char                 FileName[256];    // File name buffer
  207. extern long                    OVQuality;    // OpalVision JPG quality
  208. extern BOOL                    OVFast;        // OpalVision fast format IFF
  209. extern BOOL                    OVThumb;        // OpalVision Thumbail
  210. extern BOOL                    HAM6;
  211. extern BOOL                    HAM8;
  212. extern BOOL                    BW16;
  213. extern BOOL                    BW256;
  214. extern BOOL                    DCTV3;
  215. extern BOOL                    DCTV4;
  216. extern UBYTE                 *arrayr,        // Pointers to red,green and blue
  217.                                   *arrayg,
  218.                                   *arrayb;
  219. extern BOOL                    PPM;            // PPM save ?
  220. extern UBYTE                *p[3];// chunky pointers - order for OpalVision
  221. #define RED p[0]
  222. #define BLUE p[2]
  223. #define GREEN p[1]
  224. extern UWORD        swidth;        // scaled width (in full words)
  225. extern struct RastPort     RP,            // Work Rast Ports
  226.                          TRP;
  227. extern struct MyBitMap     MyBitMap;    // Real bit map
  228. extern PLANEPTR             Planes[24];    // Bit planes
  229. extern BOOL                    CreateIcons;// Create Icons on pictures?
  230.  
  231. extern struct OpalScreen *OScrn;
  232. extern char                 *OVFormat;    // Format of OpalVision save JPG or IFF (or anything) default
  233.  
  234. extern USHORT    width, height, pwidth, pheight, pmode;
  235.  
  236. extern UBYTE *plane0;                    // Planes for temporary bit maps
  237. extern UBYTE *plane1;
  238. extern UBYTE *plane2;
  239. extern UBYTE *plane3;
  240. extern UBYTE *plane4;
  241. extern UBYTE *plane5;
  242. extern UBYTE *plane6;
  243. extern UBYTE *plane7;
  244.  
  245. extern char AnimName[];    // Buffer for file name to save
  246.  
  247. // Table of parameters
  248. extern struct {
  249.     LONG xf;                // Current frame
  250.     LONG xFrames;        // Number of frames
  251.     LONG xSingle;        // Warp or Morph
  252.     LONG xmove;            // Movement 1 to 2
  253.     LONG xr;                // red of image 1
  254.     LONG xg;                // green
  255.     LONG xb;                // blue
  256.     LONG xr2;            // red of image 2
  257.     LONG xg2;            // green
  258.     LONG xb2;            // blue
  259.     LONG xDo;            // Produce this image
  260.     LONG xrplus;        // Add red
  261.     LONG xgplus;        // green
  262.     LONG xbplus;        // blue
  263.     LONG xrminus;        // subtract red
  264.     LONG xgminus;        // subtract green
  265.     LONG xbminus;        // subtract blue
  266.     LONG xDX;            // X skip
  267.     LONG xDY;            // Y skip
  268.     LONG xStart;        // Start Frame number
  269.     LONG FILLER[32];    // Filler for future expansion
  270. } Arexx;
  271.  
  272. #define f Arexx.xf
  273. #define Frames Arexx.xFrames
  274. #define Single Arexx.xSingle
  275. #define move Arexx.xmove
  276. #define r Arexx.xr
  277. #define g Arexx.xg
  278. #define b Arexx.xb
  279. #define r2 Arexx.xr2
  280. #define g2 Arexx.xg2
  281. #define b2 Arexx.xb2
  282. #define Do Arexx.xDo
  283. #define rplus Arexx.xrplus
  284. #define gplus Arexx.xgplus
  285. #define bplus Arexx.xbplus
  286. #define rminus Arexx.xrminus
  287. #define gminus Arexx.xgminus
  288. #define bminus Arexx.xbminus
  289. #define DX Arexx.xDX
  290. #define DY Arexx.xDY
  291. #define Start Arexx.xStart
  292.  
  293. extern char buffer[256];
  294. extern char buffer1[512];
  295. extern char    *Postscript;// ARexx postscript
  296.  
  297. extern WORD x,y;                // Current coords
  298.  
  299. void help(ULONG hnum);
  300. void DisableWindow(void);
  301. void EnableWindow(void);
  302. void AddMessage(UBYTE *message);
  303.  
  304. // SaveHAMetc.c
  305. BOOL SaveBW16(UBYTE *FileName,USHORT width,USHORT height, UWORD swidth,
  306.                   USHORT pwidth, USHORT pheight, USHORT pmode,
  307.                   UBYTE *red, UBYTE *green, UBYTE *blue, struct RastPo