home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / FORTH / FRASRC11.ZIP / FRACTINT.H < prev    next >
Text File  |  1989-11-25  |  13KB  |  378 lines

  1.  
  2. /* FRACTINT.H - common structures and values for the FRACTINT routines */
  3.  
  4. #define MAXPIXELS 2049        /* Maximum pixel count across/down the screen */
  5.  
  6. struct videoinfo {        /* All we need to know about a Video Adapter */
  7.     char    name[26];    /* Adapter name (IBM EGA, etc)        */
  8.     char    comment[26];    /* Comments (UNTESTED, etc)        */
  9.     int    videomodeax;    /* begin with INT 10H, AX=(this)    */
  10.     int    videomodebx;    /*        ...and BX=(this)    */
  11.     int    videomodecx;    /*        ...and CX=(this)    */
  12.     int    videomodedx;    /*        ...and DX=(this)    */
  13.                 /* NOTE:  IF AX==BX==CX==0, SEE BELOW    */
  14.     int    dotmode;    /* video access method used by asm code    */
  15.                 /*    1 == BIOS 10H, AH=12,13 (SLOW)    */
  16.                 /*    2 == access like EGA/VGA    */
  17.                 /*    3 == access like MCGA        */
  18.                 /*    4 == Tseng-like  SuperVGA*256    */
  19.                 /*    5 == P'dise-like SuperVGA*256    */
  20.                 /*    6 == Vega-like   SuperVGA*256    */
  21.                 /*    7 == "Tweaked" IBM-VGA ...*256    */
  22.                 /*    8 == "Tweaked" SuperVGA ...*256    */
  23.                 /*    9 == Targa Format        */
  24.                 /*    10 = Hercules             */
  25.                 /*    11 = "disk video" (no screen)    */
  26.                 /*    12 = 8514/A             */
  27.                 /*    13 = CGA 320x200x4, 640x200x2    */
  28.                 /*    14 = Tandy 1000         */
  29.                 /*    15 = TRIDENT  SuperVGA*256    */
  30.                 /*    16 = Chips&Tech SuperVGA*256    */
  31.     int    xdots;        /* number of dots across the screen    */
  32.     int    ydots;        /* number of dots down the screen    */
  33.     int    colors;        /* number of colors available        */
  34.     };
  35.  
  36. /* NOTE:  if videomode[abc]x == 0, 'setvideomode' assumes it has an IBM (or
  37.     register compatible) adapter and tweaks the registers directly
  38.     to get one of the following modes (based on the value of videomodedx):
  39.  
  40.         1        704 x 528 x 16
  41.         2        720 x 540 x 16
  42.         3        736 x 552 x 16
  43.         4        752 x 564 x 16
  44.         5        768 x 576 x 16
  45.         6        784 x 588 x 16
  46.         7        800 x 600 x 16
  47.         8        360 x 480 x 16
  48.  
  49. */
  50.  
  51. #define INFO_ID         "Fractal"
  52. #define FRACTAL_INFO   struct fractal_info
  53.  
  54. struct fractal_info             /*  for saving data in GIF file     */
  55. {
  56.     char info_id[8];        /* Unique identifier for info block */
  57.     int iterations;
  58.     int fractal_type;           /* 0=Mandelbrot 1=Julia 2= ... */
  59.     double    xmin;
  60.     double    xmax;
  61.     double    ymin;
  62.     double    ymax;
  63.     double    creal;
  64.     double    cimag;
  65.     int    videomodeax;
  66.     int    videomodebx;
  67.     int    videomodecx;
  68.     int    videomodedx;
  69.     int    dotmode;
  70.     int    xdots;
  71.     int    ydots;
  72.     int colors;
  73.     int version;        /* used to be 'future[0]' */
  74.     float parm3;           
  75.     float parm4;           
  76.     float potential[3];      
  77.     int rseed;             
  78.     int rflag;
  79.     int biomorph;
  80.     int inside;            
  81.     int logmap;
  82.     float invert[3];
  83.     int decomp[2];
  84.     int symmetry;
  85.     int future[35];     /* for stuff we haven't thought of yet */
  86. };
  87.  
  88. #define MAXVIDEOMODES 100    /* maximum size of the video table */
  89.  
  90. #if defined(PUTTHEMHERE)    /* this MUST be defined ONLY in FRACTINT.C */
  91.  
  92. struct videoinfo videoentry; 
  93.  
  94. int    maxvideomode;        /* size of the above list */
  95.  
  96. char *fkeys[] = {        /* Function Key names for display table */
  97.     "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10",
  98.     "SF1","SF2","SF3","SF4","SF5","SF6","SF7","SF8","SF9","SF10",
  99.     "CF1","CF2","CF3","CF4","CF5","CF6","CF7","CF8","CF9","CF10",
  100.     "AF1","AF2","AF3","AF4","AF5","AF6","AF7","AF8","AF9","AF10",
  101.     "Alt-1","Alt-2","Alt-3","Alt-4","Alt-5",
  102.     "Alt-6","Alt-7","Alt-8","Alt-9","Alt-0",
  103.     "Alt-Q","Alt-W","Alt-E","Alt-R","Alt-T",
  104.     "Alt-Y","Alt-U","Alt-I","Alt-O","Alt-P",
  105.     "Alt-A","Alt-S","Alt-D","Alt-F","Alt-G",
  106.     "Alt-H","Alt-J","Alt-K","Alt-L",
  107.     "Alt-Z","Alt-X","Alt-C","Alt-V","Alt-B","Alt-N","Alt-M",
  108.     "Alt--","Alt-=",
  109.     "Ctl-A","Ctl-B","Ctl-C","Ctl-D","Ctl-E","Ctl-F","Ctl-G",
  110.     "Ctl-K","Ctl-L","Ctl-N","Ctl-O","Ctl-P","Ctl-Q","Ctl-R",
  111.     "Ctl-S","Ctl-T","Ctl-U","Ctl-V","Ctl-W","Ctl-X","Ctl-Y","Ctl-Z",
  112.     "F11","F12","SF11","SF12","CF11","CF12","AF11","AF12",
  113.     "Alt-,","Alt-.","Alt-/","Alt-;","Alt-'","Alt-[","Alt-]","Alt-\\",
  114.     "Alt-`","A-Tab","A-Bks","A-Esc",
  115.     "END"};
  116.  
  117. int kbdkeys[] = {        /* Function Keystrokes for above names */
  118.     1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
  119.     1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093,
  120.     1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103,
  121.     1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113,
  122.     1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
  123.     1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
  124.     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
  125.     1044, 1045, 1046, 1047, 1048, 1049, 1050,
  126.     1130, 1131,
  127.        1,    2,    3,    4,    5,    6,    7,
  128.       11,   12,   14,   15,   16,   17,   18,
  129.       19,   20,   21,   22,   23,   24,   25,   26,
  130.     1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140,
  131.     1051, 1052, 1053, 1039, 1040, 1026, 1027, 1043,
  132.     1041, 1165, 1014, 1001,
  133.     0};
  134.  
  135. #else
  136.  
  137. extern struct videoinfo videoentry;
  138. extern int maxvideomode;
  139.  
  140. #endif
  141.  
  142. /* defines of some of the early fractal types
  143.         (hardcoded in various routines)
  144.    remainder defined in calcfract.c/fractals.c (used only there) */
  145.  
  146. #define NOFRACTAL    -1
  147. #define MANDEL       0 
  148. #define JULIA        1 
  149. #define NEWTBASIN    2 
  150. #define LAMBDA       3 
  151. #define MANDELFP     4 
  152. #define NEWTON       5 
  153. #define JULIAFP      6 
  154. #define PLASMA       7 
  155.  
  156. #define NUMIFS    32     /* number of ifs functions in ifs array */
  157. #define IFSPARM    7     /* number of ifs parameters */
  158. #define IFS3DPARM 13     /* number of ifs 3D parameters */
  159.  
  160. /* defines for symmetry */
  161. #define  NOSYM          0
  162. #define  XAXIS_NOPARM  -1
  163. #define  XAXIS          1
  164. #define  YAXIS_NOPARM  -2
  165. #define  YAXIS          2
  166. #define  XYAXIS_NOPARM -3
  167. #define  XYAXIS         3
  168. #define  ORIGIN_NOPARM -4
  169. #define  ORIGIN         4
  170. #define  PI_SYM_NOPARM -5
  171. #define  PI_SYM         5
  172. #define  NOPLOT        99
  173.  
  174. extern float   far initifs[NUMIFS][IFSPARM];          /* IFS code values */
  175. extern float   far initifs3d[NUMIFS][IFS3DPARM];      /* IFS 3D code values */
  176.  
  177. struct fractalspecificstuff 
  178. {
  179.    char  *name;                /* name of the fractal */
  180.    char  *param[4];            /* name of the parameters */
  181.    float xmin;                /* default XMIN corner */
  182.    float xmax;                /* default XMAX corner */
  183.    float ymin;                /* default YMIN corner */
  184.    float ymax;                /* default YMAX corner */
  185.    int   isinteger;            /* 1 if integerfractal, 0 otherwise */
  186.    int   tojulia;            /* mandel-to-julia switch */
  187.    int   tomandel;                      /* julia-to-mandel switch */
  188.    int   tofloat;            /* integer-to-floating switch */
  189.    int     symmetry;            /* applicable symmetry logic
  190.                        0 = no symmetry
  191.                       -1 = y-axis symmetry (If No Params)
  192.                        1 = y-axis symmetry
  193.                       -2 = x-axis symmetry (No Parms)
  194.                        2 = x-axis symmetry
  195.                       -3 = y-axis AND x-axis (No Parms)
  196.                        3 = y-axis AND x-axis symmetry
  197.                       -4 = polar symmetry (No Parms)
  198.                        4 = polar symmetry
  199.                        5 = PI (sin/cos) symmetry
  200.                        6 = NEWTON (power) symmetry
  201.                                    */
  202.    int (*orbitcalc)();        /* function that calculates one orbit */
  203.    void (*per_pixel)();        /* once-per-pixel init */
  204.    int (*per_image)();        /* once-per-image setup */
  205.    int (*calctype)();        /* name of main fractal function */
  206.    int orbit_bailout;        /* usual bailout value for orbit calc */
  207. };
  208.  
  209. extern struct fractalspecificstuff fractalspecific[];
  210.  
  211.  
  212. /*    help screens */
  213.  
  214. #define HELPAUTHORS    1
  215. #define HELPMAIN    2
  216. #define    HELPCYCLING    3
  217. #define HELPMOUSE    4
  218. #define    HELPCMDLINE    5
  219. #define HELPFRACTALS    6
  220. #define    HELPVIDEO    7
  221. #define    HELPMOREINFO    8
  222. #define HELPMENU    98
  223. #define    HELPEXIT    99
  224.  
  225. #if defined(PUTTHEMHERE)    /* this MUST be defined ONLY in FRACTINT.C */
  226.  
  227. int helpmode;
  228.  
  229. #else
  230.  
  231. extern int helpmode;
  232.  
  233. #endif
  234.  
  235. #define DEFAULTFRACTALTYPE    ".fra"
  236. #define    ALTERNATEFRACTALTYPE    ".gif"
  237.  
  238. #ifndef sqr
  239. #define sqr(x) ((x)*(x))
  240. #endif
  241.  
  242. /* 3D stuff - formerly in 3d.h */
  243. #ifndef dot_product
  244. #define dot_product(v1,v2)  ((v1)[0]*(v2)[0]+(v1)[1]*(v2)[1]+(v1)[2]*(v2)[2])  /* TW 7-09-89 */ 
  245. #endif
  246.  
  247. #define    CMAX    4   /* maximum column (4 x 4 matrix) */
  248. #define    RMAX    4   /* maximum row    (4 x 4 matrix) */
  249. #define    DIM     3   /* number of dimensions */
  250.  
  251. typedef double MATRIX [RMAX] [CMAX];  /* matrix of doubles */
  252. typedef int   IMATRIX [RMAX] [CMAX];  /* matrix of ints    */
  253. typedef long  LMATRIX [RMAX] [CMAX];  /* matrix of longs   */
  254.  
  255. /* A MATRIX is used to describe a transformation from one coordinate
  256. system to another.  Multiple transformations may be concatenated by
  257. multiplying their transformation matrices. */
  258.  
  259. typedef double VECTOR [DIM];  /* vector of doubles */
  260. typedef int   IVECTOR [DIM];  /* vector of ints    */
  261. typedef long  LVECTOR [DIM];  /* vector of longs   */
  262.  
  263. /* A VECTOR is an array of three coordinates [x,y,z] representing magnitude
  264. and direction. A fourth dimension is assumed to always have the value 1, but
  265. is not in the data structure */
  266.  
  267. struct lcomplex
  268. {
  269.    long x;
  270.    long y;
  271. };
  272.  
  273. #define PI 3.14159265358979323846
  274.  
  275. #define SPHERE    init3d[0]        /* sphere? 1 = yes, 0 = no  */
  276. #define ILLUMINE  (FILLTYPE>4)  /* illumination model       */
  277.   
  278. /* regular 3D */
  279. #define XROT      init3d[1]     /* rotate x-axis 60 degrees */
  280. #define YROT      init3d[2]     /* rotate y-axis 90 degrees */
  281. #define ZROT      init3d[3]     /* rotate x-axis  0 degrees */
  282. #define XSCALE    init3d[4]     /* scale x-axis, 90 percent */
  283. #define YSCALE    init3d[5]     /* scale y-axis, 90 percent */
  284.  
  285. /* sphere 3D */
  286. #define PHI1      init3d[1]     /* longitude start, 180     */
  287. #define PHI2      init3d[2]     /* longitude end ,   0      */
  288. #define THETA1    init3d[3]        /* latitude start,-90 degrees */
  289. #define THETA2    init3d[4]        /* latitude stop,  90 degrees */
  290. #define RADIUS    init3d[5]     /* should be user input */
  291.  
  292. /* common parameters */
  293. #define ROUGH     init3d[6]     /* scale z-axis, 30 percent */
  294. #define WATERLINE init3d[7]     /* water level              */
  295. #define FILLTYPE  init3d[8]     /* fill type                */
  296. #define ZVIEWER   init3d[9]     /* perspective view point   */
  297. #define XSHIFT    init3d[10]    /* x shift */
  298. #define YSHIFT    init3d[11]    /* y shift */
  299. #define XLIGHT    init3d[12]    /* x light vector coordinate */
  300. #define YLIGHT    init3d[13]    /* y light vector coordinate */
  301. #define ZLIGHT    init3d[14]    /* z light vector coordinate */
  302. #define LIGHTAVG  init3d[15]    /* number of points to average */
  303.  
  304. #ifndef TRUE
  305. #define TRUE 1
  306. #define FALSE 0
  307. #endif
  308.  
  309.  
  310. /* function prototypes */
  311.  
  312. #include <math.h>
  313.  
  314. extern  void   adjust(int, int, int, int, int, int);
  315. extern    void   buzzer(int);
  316. extern  int    calcfract(void);
  317. extern  int    calcmand(void);
  318. extern  int    check_key(void);
  319. extern    int    complex_mult(struct complex, struct complex, struct complex *);
  320. extern    int    complex_div(struct complex, struct complex, struct complex *);
  321. extern    int    complex_power(struct complex, int, struct complex *);
  322. extern  int    cross_product(double [], double [], double []);
  323. extern  void   drawbox(int);
  324. extern    unsigned int emmallocate(unsigned int);
  325. extern    void   emmclearpage(unsigned int, unsigned int);
  326. extern  void   emmdeallocate(unsigned int);
  327. extern  unsigned int emmgetfree(void);
  328. extern  void   emmgetpage(unsigned int, unsigned int);
  329. extern  unsigned char far *emmquery(void);
  330. extern    unsigned char far *farmemalloc(long);
  331. extern    void   farmemfree(unsigned char far *);
  332. extern  int    getakey(void);
  333. extern  int    getcolor(int, int);
  334. extern  int    has_8087(void );
  335. extern    void    helpmessage(unsigned char far *);
  336. extern  void   identity(MATRIX);
  337. extern  int    iplot_orbit(long, long, int);
  338. extern  int    Juliafp(void);
  339. extern  int    longvmultpersp(LVECTOR, LMATRIX, LVECTOR, LVECTOR, LVECTOR, int);
  340. extern  int    longpersp(LVECTOR, LVECTOR,int);
  341. extern  int    Lambda(void);
  342. extern  int    Lambdasine(void);
  343. extern  int    MainNewton(void);
  344. extern  void   mat_mul(MATRIX, MATRIX, MATRIX);
  345. extern  void   main(int, char *[]);
  346. extern  int    Mandelfp(void);
  347. extern    long   multiply(long, long, int);
  348. extern    long   divide(long, long, int);
  349. extern  int    Newton(void);
  350. extern  int    perspective(double *v);
  351. extern  int    plasma(void);
  352. extern  int    plot_orbit(double, double, int);
  353. extern    void    cdecl    Print_Screen(void);    /* MDS 7/1/89 */
  354. extern  void   putcolor(int, int, int);
  355. extern  void   scale(double, double, double, MATRIX);
  356. extern  int    scrub_orbit(void);
  357. extern  int    set_Plasma_palette(void);
  358. extern  void   setvideomode(int, int, int, int);
  359. extern    int    Sierpinski(void);
  360. extern  int    solidguess(void);
  361. extern  void   spindac(int, int);
  362. extern  void   subDivide(int, int, int, int);
  363. extern  void   symPIplot(int, int, int);
  364. extern  void   symPIplot2J(int, int, int);
  365. extern  void   symPIplot4J(int, int, int);
  366. extern  void   symplot2(int, int, int);
  367. extern  void   symplot2J(int, int, int);
  368. extern  void   symplot2Y(int, int, int);
  369. extern  void   symplot4(int, int, int);
  370. extern  void   noplot(int, int, int);
  371. extern  int    test(void);
  372. extern  void   trans(double, double, double, MATRIX);
  373. extern  int    vmult(VECTOR,MATRIX,VECTOR);
  374. extern  void   xrot(double, MATRIX);
  375. extern  void   yrot(double, MATRIX);
  376. extern  void   zrot(double, MATRIX);
  377.  
  378.