home *** CD-ROM | disk | FTP | other *** search
/ Fractal Creations (Second Edition) / FRACTALS_2E.iso / frasrc.exe / FRACTINT.H < prev    next >
C/C++ Source or Header  |  1993-08-21  |  20KB  |  668 lines

  1. /* FRACTINT.H - common structures and values for the FRACTINT routines */
  2.  
  3. #if defined(PUTTHEMHERE)        /* this MUST be defined ONLY in FRACTINT.C */
  4. struct videoinfo videoentry;
  5. int helpmode;
  6. #endif
  7.  
  8. #ifndef FRACTINT_H
  9. #define FRACTINT_H
  10.  
  11. #if !defined(PUTTHEMHERE)  
  12. extern struct videoinfo videoentry;
  13. extern int        helpmode;
  14. #endif
  15.  
  16. #include <math.h>
  17. #include "port.h"
  18.  
  19. typedef BYTE BOOLEAN;
  20.  
  21. #ifndef C6
  22. #define _fastcall    /* _fastcall is a Microsoft C6.00 extension */
  23. #endif
  24.  
  25. #ifndef XFRACT
  26. typedef int SEGTYPE;
  27. typedef unsigned USEGTYPE;
  28. #ifdef __TURBOC__
  29. #   define _bios_printer(a,b,c)   biosprint((a),(c),(b))
  30. #   define _bios_serialcom(a,b,c) bioscom((a),(c),(b))
  31. #else
  32. #ifndef __WATCOMC__
  33. #ifndef MK_FP
  34. #   define MK_FP(seg,off) (VOIDFARPTR )( (((long)(seg))<<16) | \
  35.                                           ((unsigned)(off)) )
  36. #endif
  37. #endif
  38. #endif
  39. #else
  40. typedef char * SEGTYPE;
  41. typedef char * USEGTYPE;
  42. #   define MK_FP(seg,off) (VOIDFARPTR )(seg+off)
  43. #endif
  44.  
  45.  
  46. #ifndef XFRACT
  47. #define clock_ticks() clock()
  48. #endif
  49.  
  50. #ifdef XFRACT
  51. #define _fstrcpy(to,from) strcpy(to,from)
  52. #endif
  53.  
  54. /* these are used to declare arrays for file names */
  55. #define FILE_MAX_PATH  80       /* max length of path+filename  */
  56. #define FILE_MAX_DIR   80       /* max length of directory name */
  57. #define FILE_MAX_DRIVE  3       /* max length of drive letter   */
  58. #define FILE_MAX_FNAME  9       /* max length of filename       */
  59. #define FILE_MAX_EXT    5       /* max length of extension      */
  60.  
  61. #define MAXPARAMS 10        /* maximum number of parameters */
  62. #define MAXPIXELS 2048        /* Maximum pixel count across/down the screen */
  63. #define DEFAULTASPECT 0.75    /* Assumed overall screen dimensions, y/x     */
  64.  
  65. struct videoinfo {        /* All we need to know about a Video Adapter */
  66.     char    name[26];    /* Adapter name (IBM EGA, etc)        */
  67.     char    comment[26];    /* Comments (UNTESTED, etc)        */
  68.     int    keynum;     /* key number used to invoked this mode */
  69.                 /* 2-10 = F2-10, 11-40 = S,C,A{F1-F10}    */
  70.     int    videomodeax;    /* begin with INT 10H, AX=(this)    */
  71.     int    videomodebx;    /*        ...and BX=(this)    */
  72.     int    videomodecx;    /*        ...and CX=(this)    */
  73.     int    videomodedx;    /*        ...and DX=(this)    */
  74.                 /* NOTE:  IF AX==BX==CX==0, SEE BELOW    */
  75.     int    dotmode;    /* video access method used by asm code */
  76.                 /*    1 == BIOS 10H, AH=12,13 (SLOW)    */
  77.                 /*    2 == access like EGA/VGA    */
  78.                 /*    3 == access like MCGA        */
  79.                 /*    4 == Tseng-like  SuperVGA*256    */
  80.                 /*    5 == P'dise-like SuperVGA*256   */
  81.                 /*    6 == Vega-like     SuperVGA*256    */
  82.                 /*    7 == "Tweaked" IBM-VGA ...*256  */
  83.                 /*    8 == "Tweaked" SuperVGA ...*256 */
  84.                 /*    9 == Targa Format        */
  85.                 /*    10 = Hercules            */
  86.                 /*    11 = "disk video" (no screen)   */
  87.                 /*    12 = 8514/A            */
  88.                 /*    13 = CGA 320x200x4, 640x200x2    */
  89.                 /*    14 = Tandy 1000         */
  90.                 /*    15 = TRIDENT  SuperVGA*256    */
  91.                 /*    16 = Chips&Tech SuperVGA*256    */
  92.     int    xdots;        /* number of dots across the screen    */
  93.     int    ydots;        /* number of dots down the screen    */
  94.     int    colors;     /* number of colors available        */
  95.     };
  96.  
  97.  
  98. #define INFO_ID     "Fractal"
  99. #define FRACTAL_INFO   struct fractal_info
  100.  
  101. /*
  102.  * Note: because non-MSDOS machines store structures differently, we have
  103.  * to do special processing of the fractal_info structure in loadfile.c.
  104.  * Make sure changes to the structure here get reflected there.
  105.  */
  106. #ifndef XFRACT
  107. #define FRACTAL_INFO_SIZE sizeof(FRACTAL_INFO)
  108. #else
  109. /* This value should be the MSDOS size, not the Unix size. */
  110. #define FRACTAL_INFO_SIZE 502
  111. #endif
  112.  
  113. struct fractal_info        /*  for saving data in GIF file     */
  114. {
  115.     char  info_id[8];        /* Unique identifier for info block */
  116.     short iterations;
  117.     short fractal_type;        /* 0=Mandelbrot 1=Julia 2= ... */
  118.     double xmin;
  119.     double xmax;
  120.     double ymin;
  121.     double ymax;
  122.     double creal;
  123.     double cimag;
  124.     short videomodeax;
  125.     short videomodebx;
  126.     short videomodecx;
  127.     short videomodedx;
  128.     short dotmode;
  129.     short xdots;
  130.     short ydots;
  131.     short colors;
  132.     short version;        /* used to be 'future[0]' */
  133.     float parm3;
  134.     float parm4;
  135.     float potential[3];
  136.     short rseed;
  137.     short rflag;
  138.     short biomorph;
  139.     short inside;
  140.     short logmap;
  141.     float invert[3];
  142.     short decomp[2];
  143.     short symmetry;
  144.             /* version 2 stuff */
  145.     short init3d[16];
  146.     short previewfactor;
  147.     short xtrans;
  148.     short ytrans;
  149.     short red_crop_left;
  150.     short red_crop_right;
  151.     short blue_crop_left;
  152.     short blue_crop_right;
  153.     short red_bright;
  154.     short blue_bright;
  155.     short xadjust;
  156.     short eyeseparation;
  157.     short glassestype;
  158.             /* version 3 stuff, release 13 */
  159.     short outside;
  160.             /* version 4 stuff, release 14 */
  161.     double x3rd;      /* 3rd corner */
  162.     double y3rd;
  163.     char stdcalcmode;      /* 1/2/g/b */
  164.     char useinitorbit;      /* init Mandelbrot orbit flag */
  165.     short calc_status;      /* resumable, finished, etc */
  166.     long tot_extend_len;  /* total length of extension blocks in .gif file */
  167.     short distest;
  168.     short floatflag;
  169.     short bailout;
  170.     long calctime;
  171.     BYTE trigndx[4];      /* which trig functions selected */
  172.     short finattract;
  173.     double initorbit[2];  /* init Mandelbrot orbit values */
  174.     short periodicity;      /* periodicity checking */
  175.             /* version 5 stuff, release 15 */
  176.     short pot16bit;      /* save 16 bit continuous potential info */
  177.     float faspectratio;   /* finalaspectratio, y/x */
  178.     short system;       /* 0 for dos, 1 for windows */
  179.     short release;      /* release number, with 2 decimals implied */
  180.     short flag3d;       /* stored only for now, for future use */
  181.     short transparent[2];
  182.     short ambient;
  183.     short haze;
  184.     short randomize;
  185.             /* version 6 stuff, release 15.x */
  186.     short rotate_lo;
  187.     short rotate_hi;
  188.     short distestwidth;
  189.             /* version 7 stuff, release 16 */
  190.     double dparm3;
  191.     double dparm4;
  192.             /* version 8 stuff, release 17 */
  193.     short fillcolor;
  194.             /* version 9 stuff, release 18 */
  195.     double mxmaxfp;
  196.     double mxminfp;
  197.     double mymaxfp;
  198.     double myminfp;
  199.     short zdots;
  200.     float originfp;
  201.     float depthfp;
  202.     float heightfp;
  203.     float widthfp;
  204.     float distfp;
  205.     float eyesfp;
  206.     short orbittype;
  207.     short juli3Dmode;
  208.     short maxfn;
  209.     short inversejulia;
  210.     double dparm5;
  211.     double dparm6;
  212.     double dparm7;
  213.     double dparm8;
  214.     double dparm9;
  215.     double dparm10;
  216.     short future[50];      /* for stuff we haven't thought of yet */
  217. };
  218.  
  219.  
  220.  
  221. #define MAXVIDEOMODES 300    /* maximum entries in fractint.cfg      */
  222. #ifndef XFRACT
  223. #define MAXVIDEOTABLE 40        /* size of the resident video modes table */
  224. #else
  225. #define MAXVIDEOTABLE 2         /* size of the resident video modes table */
  226. #endif
  227.  
  228. #define AUTOINVERT -123456.789
  229.  
  230. #define N_ATTR 8            /* max number of attractors    */
  231.  
  232. extern    long     l_at_rad;    /* finite attractor radius  */
  233. extern    double     f_at_rad;    /* finite attractor radius  */
  234.  
  235. #define NUMIFS      64     /* number of ifs functions in ifs array */
  236. #define IFSPARM    7     /* number of ifs parameters */
  237. #define IFS3DPARM 13     /* number of ifs 3D parameters */
  238.  
  239. #define ITEMNAMELEN 18     /* max length of names in .frm/.l/.ifs/.fc */
  240.  
  241. struct moreparams
  242. {
  243.    int      type;                        /* index in fractalname of the fractal */
  244.    char     *param[MAXPARAMS-4];    /* name of the parameters */
  245.    double   paramvalue[MAXPARAMS-4];     /* default parameter values */
  246. };
  247.  
  248. struct fractalspecificstuff
  249. {
  250.    char  *name;             /* name of the fractal */
  251.                     /* (leading "*" supresses name display) */ 
  252.    char  *param[4];            /* name of the parameters */
  253.    double paramvalue[4];         /* default parameter values */
  254.    int     helptext;            /* helpdefs.h HT_xxxx, -1 for none */
  255.    int     helpformula;            /* helpdefs.h HF_xxxx, -1 for none */
  256.    int     flags;             /* constraints, bits defined below */
  257.    float xmin;                /* default XMIN corner */
  258.    float xmax;                /* default XMAX corner */
  259.    float ymin;                /* default YMIN corner */
  260.    float ymax;                /* default YMAX corner */
  261.    int     isinteger;            /* 1 if integerfractal, 0 otherwise */
  262.    int     tojulia;            /* mandel-to-julia switch */
  263.    int     tomandel;            /* julia-to-mandel switch */
  264.    int     tofloat;            /* integer-to-floating switch */
  265.    int     symmetry;            /* applicable symmetry logic
  266.                        0 = no symmetry
  267.                       -1 = y-axis symmetry (If No Params)
  268.                        1 = y-axis symmetry
  269.                       -2 = x-axis symmetry (No Parms)
  270.                        2 = x-axis symmetry
  271.                       -3 = y-axis AND x-axis (No Parms)
  272.                        3 = y-axis AND x-axis symmetry
  273.                       -4 = polar symmetry (No Parms)
  274.                        4 = polar symmetry
  275.                        5 = PI (sin/cos) symmetry
  276.                        6 = NEWTON (power) symmetry
  277.                                 */
  278.    int (*orbitcalc)();        /* function that calculates one orbit */
  279.    int (*per_pixel)();        /* once-per-pixel init */
  280.    int (*per_image)();        /* once-per-image setup */
  281.    int (*calctype)();        /* name of main fractal function */
  282.    int orbit_bailout;        /* usual bailout value for orbit calc */
  283. };
  284.  
  285. /* defines for symmetry */
  286. #define  NOSYM        0
  287. #define  XAXIS_NOPARM  -1
  288. #define  XAXIS        1
  289. #define  YAXIS_NOPARM  -2
  290. #define  YAXIS        2
  291. #define  XYAXIS_NOPARM -3
  292. #define  XYAXIS     3
  293. #define  ORIGIN_NOPARM -4
  294. #define  ORIGIN     4
  295. #define  PI_SYM_NOPARM -5
  296. #define  PI_SYM     5
  297. #define  XAXIS_NOIMAG  -6
  298. #define  XAXIS_NOREAL    6
  299. #define  NOPLOT        99
  300. #define  SETUP_SYM    100
  301.  
  302. /* defines for inside/outside */
  303. #define ITER        -1
  304. #define REAL        -2
  305. #define IMAG        -3
  306. #define MULT        -4
  307. #define SUM         -5
  308. #define ZMAG       -59
  309. #define BOF60      -60
  310. #define BOF61      -61
  311. #define EPSCROSS  -100
  312. #define STARTRAIL -101
  313. #define PERIOD    -102
  314.  
  315. /* bitmask defines for fractalspecific flags */
  316. #define  NOZOOM     1    /* zoombox not allowed at all       */
  317. #define  NOGUESS    2    /* solid guessing not allowed       */
  318. #define  NOTRACE    4    /* boundary tracing not allowed       */
  319. #define  NOROTATE    8    /* zoombox rotate/stretch not allowed */
  320. #define  NORESUME      16    /* can't interrupt and resume         */
  321. #define  INFCALC       32    /* this type calculates forever       */
  322. #define  TRIG1           64    /* number of trig functions in formula*/
  323. #define  TRIG2          128
  324. #define  TRIG3          192
  325. #define  TRIG4          256
  326. #define  WINFRAC      512    /* supported in WinFrac           */
  327. #define  PARMS3D     1024    /* uses 3d parameters           */
  328. #define  OKJB        2048    /* works with Julibrot */
  329. #define  MORE        4096    /* more than 4 parms */
  330.  
  331. extern struct fractalspecificstuff far fractalspecific[];
  332. extern struct fractalspecificstuff far *curfractalspecific;
  333.  
  334. #define DEFAULTFRACTALTYPE    ".gif"
  335. #define ALTERNATEFRACTALTYPE    ".fra"
  336.  
  337. #ifndef _CMPLX_DEFINED
  338. #define _CMPLX_DEFINED
  339.  
  340. struct DHyperComplex {
  341.     double x,y;
  342.     double z,t;  
  343. };
  344.  
  345. struct LHyperComplex {
  346.     long x,y;
  347.     long z,t; 
  348. };
  349.  
  350. struct DComplex {
  351.     double x,y;
  352. };
  353.  
  354. struct LComplex {
  355.     long x,y;
  356. };
  357.  
  358. typedef struct  DComplex         _CMPLX;
  359. typedef struct  LComplex         _LCMPLX;
  360. typedef struct  DHyperComplex    _HCMPLX;
  361. typedef struct  LHyperComplex    _LHCMPLX;
  362. #endif
  363.  
  364. #ifndef sqr
  365. #define sqr(x) ((x)*(x))
  366. #endif
  367.  
  368. #ifndef lsqr
  369. #define lsqr(x) (multiply((x),(x),bitshift))
  370. #endif
  371.  
  372. #define CMPLXmod(z)      (sqr((z).x)+sqr((z).y))
  373. #define CMPLXconj(z)    ((z).y =  -((z).y))
  374. #define LCMPLXmod(z)       (lsqr((z).x)+lsqr((z).y))
  375. #define LCMPLXconj(z)    ((z).y =  -((z).y))
  376.  
  377. typedef  _LCMPLX LCMPLX;
  378.  
  379. /* 3D stuff - formerly in 3d.h */
  380. #ifndef dot_product
  381. #define dot_product(v1,v2)  ((v1)[0]*(v2)[0]+(v1)[1]*(v2)[1]+(v1)[2]*(v2)[2])  /* TW 7-09-89 */
  382. #endif
  383.  
  384. #define    CMAX    4   /* maximum column (4 x 4 matrix) */
  385. #define    RMAX    4   /* maximum row     (4 x 4 matrix) */
  386. #define    DIM       3   /* number of dimensions */
  387.  
  388. typedef double MATRIX [RMAX] [CMAX];  /* matrix of doubles */
  389. typedef int   IMATRIX [RMAX] [CMAX];  /* matrix of ints    */
  390. typedef long  LMATRIX [RMAX] [CMAX];  /* matrix of longs   */
  391.  
  392. /* A MATRIX is used to describe a transformation from one coordinate
  393. system to another.  Multiple transformations may be concatenated by
  394. multiplying their transformation matrices. */
  395.  
  396. typedef double VECTOR [DIM];  /* vector of doubles */
  397. typedef int   IVECTOR [DIM];  /* vector of ints    */
  398. typedef long  LVECTOR [DIM];  /* vector of longs   */
  399.  
  400. /* A VECTOR is an array of three coordinates [x,y,z] representing magnitude
  401. and direction. A fourth dimension is assumed to always have the value 1, but
  402. is not in the data structure */
  403.  
  404.  
  405. #define PI 3.14159265358979323846
  406.  
  407. #define SPHERE      init3d[0]        /* sphere? 1 = yes, 0 = no  */
  408. #define ILLUMINE  (FILLTYPE>4)    /* illumination model        */
  409.  
  410. /* regular 3D */
  411. #define XROT      init3d[1]    /* rotate x-axis 60 degrees */
  412. #define YROT      init3d[2]    /* rotate y-axis 90 degrees */
  413. #define ZROT      init3d[3]    /* rotate x-axis  0 degrees */
  414. #define XSCALE      init3d[4]    /* scale x-axis, 90 percent */
  415. #define YSCALE      init3d[5]    /* scale y-axis, 90 percent */
  416.  
  417. /* sphere 3D */
  418. #define PHI1      init3d[1]    /* longitude start, 180     */
  419. #define PHI2      init3d[2]    /* longitude end ,   0        */
  420. #define THETA1      init3d[3]        /* latitude start,-90 degrees */
  421. #define THETA2      init3d[4]        /* latitude stop,  90 degrees */
  422. #define RADIUS      init3d[5]    /* should be user input */
  423.  
  424. /* common parameters */
  425. #define ROUGH      init3d[6]    /* scale z-axis, 30 percent */
  426. #define WATERLINE init3d[7]    /* water level            */
  427. #define FILLTYPE  init3d[8]    /* fill type            */
  428. #define ZVIEWER   init3d[9]    /* perspective view point   */
  429. #define XSHIFT      init3d[10]    /* x shift */
  430. #define YSHIFT      init3d[11]    /* y shift */
  431. #define XLIGHT      init3d[12]    /* x light vector coordinate */
  432. #define YLIGHT      init3d[13]    /* y light vector coordinate */
  433. #define ZLIGHT      init3d[14]    /* z light vector coordinate */
  434. #define LIGHTAVG  init3d[15]    /* number of points to average */
  435.  
  436. #ifndef TRUE
  437. #define TRUE 1
  438. #define FALSE 0
  439. #endif
  440.  
  441. /* Math definitions (normally in float.h) that are missing on some systems. */
  442. #ifndef FLT_MIN
  443. #define FLT_MIN 1.17549435e-38
  444. #endif
  445. #ifndef FLT_MAX
  446. #define FLT_MAX 3.40282347e+38
  447. #endif
  448. #ifndef DBL_EPSILON
  449. #define DBL_EPSILON 2.2204460492503131e-16
  450. #endif
  451.  
  452. #ifndef XFRACT
  453. #define UPARR "\x18"
  454. #define DNARR "\x19"
  455. #define RTARR "\x1A"
  456. #define LTARR "\x1B"
  457. #else
  458. #define UPARR "K"
  459. #define DNARR "J"
  460. #define RTARR "L"
  461. #define LTARR "H"
  462. #endif
  463.  
  464. #define JIIM  0
  465. #define ORBIT 1
  466.  
  467. struct workliststuff    /* work list entry for std escape time engines */
  468. {
  469.     int xxstart;    /* screen window for this entry */
  470.     int xxstop;
  471.     int yystart;
  472.     int yystop;
  473.     int yybegin;    /* start row within window, for 2pass/ssg resume */
  474.     int sym;    /* if symmetry in window, prevents bad combines */
  475.     int pass;    /* for 2pass and solid guessing */
  476. };
  477. #define MAXCALCWORK 12
  478.  
  479. extern BYTE trigndx[];
  480. extern void (*ltrig0)(void), (*ltrig1)(void), (*ltrig2)(void), (*ltrig3)(void);
  481. extern void (*dtrig0)(void), (*dtrig1)(void), (*dtrig2)(void), (*dtrig3)(void);
  482.  
  483. struct trig_funct_lst
  484. {
  485.     char *name;
  486.     void (*lfunct)(void);
  487.     void (*dfunct)(void);
  488.     void (*mfunct)(void);
  489. } ;
  490. extern struct trig_funct_lst trigfn[];
  491.  
  492. /* function prototypes */
  493.  
  494. extern    void   (_fastcall *plot)(int, int, int);
  495.  
  496. /* for overlay return stack */
  497.  
  498. #define ENTER_OVLY(ovlyid)\
  499.    extern int active_ovly;\
  500.    int prev_ovly;\
  501.    prev_ovly = active_ovly;\
  502.    active_ovly = ovlyid
  503. #define EXIT_OVLY active_ovly = prev_ovly
  504.  
  505. #define BIG 100000.0
  506.  
  507. #define OVLY_MISCOVL   1
  508. #define OVLY_CMDFILES  2
  509. #define OVLY_HELP      3
  510. #define OVLY_PROMPTS1  4
  511. #define OVLY_PROMPTS2  5
  512. #define OVLY_LOADFILE  6
  513. #define OVLY_ROTATE    7
  514. #define OVLY_PRINTER   8
  515. #define OVLY_LINE3D    9
  516. #define OVLY_ENCODER  10
  517. #define OVLY_CALCFRAC 11
  518. #define OVLY_INTRO    12
  519. #define OVLY_DECODER  13
  520.  
  521.  
  522. #define CTL(x) ((x)&0x1f)
  523.  
  524. /* nonalpha tests if we have a control character */
  525. #define nonalpha(c) ((c)<32 || (c)>127)
  526.  
  527. /* keys */
  528. #define   INSERT     1082
  529. #define   DELETE     1083
  530. #define   PAGE_UP     1073
  531. #define   PAGE_DOWN     1081
  532. #define   CTL_HOME     1119
  533. #define   CTL_END     1117
  534. #define   LEFT_ARROW     1075
  535. #define   RIGHT_ARROW     1077
  536. #define   UP_ARROW     1072
  537. #define   DOWN_ARROW     1080
  538. #define   LEFT_ARROW_2     1115
  539. #define   RIGHT_ARROW_2  1116
  540. #define   UP_ARROW_2     1141
  541. #define   DOWN_ARROW_2     1145
  542. #define   HOME         1071
  543. #define   END         1079
  544. #define   ENTER      13
  545. #define   ENTER_2     1013
  546. #define   CTL_ENTER      10
  547. #define   CTL_ENTER_2    1010
  548. #define   CTL_PAGE_UP    1132
  549. #define   CTL_PAGE_DOWN  1118
  550. #define   CTL_MINUS      1142
  551. #define   CTL_PLUS       1144
  552. #define   CTL_INSERT     1146
  553. #define   CTL_DEL        1147
  554. #define   F1         1059
  555. #define   F2         1060
  556. #define   F3         1061
  557. #define   F4         1062
  558. #define   F5         1063
  559. #define   F6         1064
  560. #define   F7         1065
  561. #define   F8         1066
  562. #define   F9         1067
  563. #define   F10         1068
  564. #define   TAB            9
  565. #define   ESC            27
  566. #define   SPACE          32
  567. #define   SF1            1084
  568. #define   SF2            1085
  569. #define   SF3            1086
  570. #define   SF4            1087
  571. #define   SF5            1088
  572. #define   SF6            1089
  573. #define   SF7            1090
  574. #define   SF8            1091
  575. #define   SF9            1092
  576. #define   SF10           1093
  577. /* text colors */
  578. #define BLACK       0
  579. #define BLUE       1
  580. #define GREEN       2
  581. #define CYAN       3
  582. #define RED       4
  583. #define MAGENTA    5
  584. #define BROWN       6 /* dirty yellow on cga */
  585. #define WHITE       7
  586. /* use values below this for foreground only, they don't work background */
  587. #define GRAY       8 /* don't use this much - is black on cga */
  588. #define L_BLUE       9
  589. #define L_GREEN   10
  590. #define L_CYAN      11
  591. #define L_RED      12
  592. #define L_MAGENTA 13
  593. #define YELLOW      14
  594. #define L_WHITE   15
  595. #define INVERSE 0x8000 /* when 640x200x2 text or mode 7, inverse */
  596. #define BRIGHT    0x4000 /* when mode 7, bright */
  597. /* and their use: */
  598. extern BYTE txtcolor[];
  599. #define C_TITLE       txtcolor[0]+BRIGHT
  600. #define C_TITLE_DEV      txtcolor[1]
  601. #define C_HELP_HDG      txtcolor[2]+BRIGHT
  602. #define C_HELP_BODY      txtcolor[3]
  603. #define C_HELP_INSTR      txtcolor[4]
  604. #define C_HELP_LINK      txtcolor[5]+BRIGHT
  605. #define C_HELP_CURLINK      txtcolor[6]+INVERSE
  606. #define C_PROMPT_BKGRD      txtcolor[7]
  607. #define C_PROMPT_TEXT      txtcolor[8]
  608. #define C_PROMPT_LO      txtcolor[9]
  609. #define C_PROMPT_MED      txtcolor[10]
  610. #ifndef XFRACT
  611. #define C_PROMPT_HI      txtcolor[11]+BRIGHT
  612. #else
  613. #define C_PROMPT_HI      txtcolor[11]
  614. #endif
  615. #define C_PROMPT_INPUT      txtcolor[12]+INVERSE
  616. #define C_PROMPT_CHOOSE   txtcolor[13]+INVERSE
  617. #define C_CHOICE_CURRENT  txtcolor[14]+INVERSE
  618. #define C_CHOICE_SP_INSTR txtcolor[15]
  619. #define C_CHOICE_SP_KEYIN txtcolor[16]+BRIGHT
  620. #define C_GENERAL_HI      txtcolor[17]+BRIGHT
  621. #define C_GENERAL_MED      txtcolor[18]
  622. #define C_GENERAL_LO      txtcolor[19]
  623. #define C_GENERAL_INPUT   txtcolor[20]+INVERSE
  624. #define C_DVID_BKGRD      txtcolor[21]
  625. #define C_DVID_HI      txtcolor[22]+BRIGHT
  626. #define C_DVID_LO      txtcolor[23]
  627. #define C_STOP_ERR      txtcolor[24]+BRIGHT
  628. #define C_STOP_INFO      txtcolor[25]+BRIGHT
  629. #define C_TITLE_LOW      txtcolor[26]
  630. #define C_AUTHDIV1      txtcolor[27]+INVERSE
  631. #define C_AUTHDIV2      txtcolor[28]+INVERSE
  632. #define C_PRIMARY      txtcolor[29]
  633. #define C_CONTRIB      txtcolor[30]
  634.  
  635. /* structure for xmmmoveextended parameter */
  636. struct XMM_Move
  637.   {
  638.     unsigned long   Length;
  639.     unsigned int    SourceHandle;
  640.     unsigned long   SourceOffset;
  641.     unsigned int    DestHandle;
  642.     unsigned long   DestOffset;
  643.   };
  644.  
  645. /* structure passed to fullscreen_prompts */
  646. struct fullscreenvalues
  647. {
  648.    int type;   /* 'd' for double, 'f' for float, 's' for string,   */
  649.            /* 'D' for integer in double, '*' for comment */
  650.            /* 'i' for integer, 'y' for yes=1 no=0              */
  651.            /* 0x100+n for string of length n           */
  652.            /* 'l' for one of a list of strings                 */
  653.    union
  654.    {
  655.       double dval;    /* when type 'd' or 'f'  */
  656.       int    ival;    /* when type is 'i'      */
  657.       char   sval[16];    /* when type is 's'      */
  658.       char  *sbuf;    /* when type is 0x100+n  */
  659.       struct {        /* when type is 'l'      */
  660.      int  val;    /*   selected choice     */
  661.      int  vlen;    /*   char len per choice */
  662.      char **list;    /*   list of values     */
  663.      int  llen;    /*   number of values     */
  664.       } ch;
  665.    } uval;
  666. };
  667. #endif
  668.