home *** CD-ROM | disk | FTP | other *** search
/ Computerworld 1996 March / Computerworld_1996-03_cd.bin / idg_cd3 / grafika / fraktaly / frasr192 / lsys.h < prev    next >
C/C++ Source or Header  |  1994-09-24  |  3KB  |  84 lines

  1. /* lsys.h
  2.  *    Header file for L-system code.
  3.  *    Nicholas Wilt, 6/26/93.
  4.  */
  5.  
  6. #define size    ssize
  7. /* Needed for use of asm -- helps decide which pointer to function
  8.  * to put into the struct lsys_cmds.
  9.  */
  10.  
  11. /* Macro to take an FP number and turn it into a
  12.  * 16/16-bit fixed-point number.
  13.  */
  14. #define FIXEDMUL    524288L
  15. #define FIXEDPT(x)    ((long) (FIXEDMUL * (x)))
  16.  
  17. /* The number by which to multiply sines, cosines and other
  18.  * values with magnitudes less than or equal to 1.
  19.  * sins and coss are a 3/29 bit fixed-point scheme (so the
  20.  * range is +/- 2, with good accuracy.    The range is to
  21.  * avoid overflowing when the aspect ratio is taken into
  22.  * account.
  23.  */
  24. #define FIXEDLT1    536870912.0
  25.  
  26. #define ANGLE2DOUBLE    (2.0*PI / 4294967296.0)
  27.  
  28. #define MAXRULES 27 /* this limits rules to 25 */
  29.  
  30. struct lsys_turtlestatei {
  31.     char counter, angle, reverse, stackoflow;
  32.     /* dmaxangle is maxangle - 1 */
  33.     char maxangle, dmaxangle, curcolor, dummy;    /* dummy ensures longword alignment */
  34.     long size;
  35.     long realangle;
  36.     long xpos, ypos; /* xpos and ypos are long, not fixed point */
  37.     long xmin, ymin, xmax, ymax; /* as are these */
  38.     long aspect; /* aspect ratio of each pixel, ysize/xsize */
  39.     long num;
  40. };
  41.  
  42. struct lsys_turtlestatef {
  43.     char counter, angle, reverse, stackoflow;
  44.     /* dmaxangle is maxangle - 1 */
  45.     char maxangle, dmaxangle, curcolor, dummy;    /* dummy ensures longword alignment */
  46.     LDBL size;
  47.     LDBL realangle;
  48.     LDBL xpos, ypos;
  49.     LDBL xmin, ymin, xmax, ymax;
  50.     LDBL aspect; /* aspect ratio of each pixel, ysize/xsize */
  51.     union {
  52.     long n;
  53.     LDBL nf;
  54.     } parm;
  55. };
  56.  
  57. extern char maxangle;
  58.  
  59. /* routines in lsysa.asm */
  60.  
  61. #ifdef XFRACT
  62. #define lsysi_doat_386 lsys_doat
  63. #define lsysi_dosizegf_386 lsys_dosizegf
  64. #define lsysi_dodrawg_386 lsys_dodrawg
  65. #else
  66. extern void lsysi_doat_386(struct lsys_turtlestatei *cmd);
  67. extern void lsysi_dosizegf_386(struct lsys_turtlestatei *cmd);
  68. extern void lsysi_dodrawg_386(struct lsys_turtlestatei *cmd);
  69. #endif
  70.  
  71. /* routines in lsysaf.asm */
  72.  
  73. extern void lsys_prepfpu(struct lsys_turtlestatef *);
  74. extern void lsys_donefpu(struct lsys_turtlestatef *);
  75.  
  76. /* routines in lsysf.c */
  77.  
  78. extern struct lsys_cmd far * _fastcall drawLSysF(struct lsys_cmd far *command,struct lsys_turtlestatef *ts, struct lsys_cmd far **rules,int depth);
  79. extern int _fastcall lsysf_findscale(struct lsys_cmd far *command, struct lsys_turtlestatef *ts, struct lsys_cmd far **rules, int depth);
  80. extern struct lsys_cmd far *LSysFSizeTransform(char far *s, struct lsys_turtlestatef *ts);
  81. extern struct lsys_cmd far *LSysFDrawTransform(char far *s, struct lsys_turtlestatef *ts);
  82. extern void _fastcall lsysf_dosincos(void);
  83.  
  84.