home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / EXAMPLES / DEMODRAW.C < prev    next >
C/C++ Source or Header  |  1991-03-09  |  17KB  |  732 lines

  1. /*
  2.     demodraw.c
  3.  
  4.     C-scape 3.2    Example Program
  5.     Copyright (c) 1989, 1990 by Oakland Group, Inc.
  6.     ALL RIGHTS RESERVED.
  7.  
  8.     This program demonstrates how graphics images can be placed
  9.     on top of C-scape screens.
  10.  
  11.     This program relies on the compiler supplied graphics library
  12.     to draw the graphic images.
  13.  
  14.     The following graphics libraries are supported:
  15.     
  16.     Note:    If you are running on a CGA then you must run 
  17.             the DOS utility GRAPTABL.COM before running 
  18.             this program.  GRAPTABL.COM loads the extended 
  19.             ASCII character    set for use in graphics mode.
  20.  
  21.     Note:    The Microsoft 5.1 graphics library does not support the
  22.             Hercules card.  The Microsoft 6.0 library does, but first
  23.             you have to install a TSR utility for it to work.
  24.  
  25.     Revision History:
  26.     -----------------
  27.     11/15/89 pmcm    added more detailed error messages
  28.     11/15/89 pmcm    added error checking on modes not supported by TC or MS
  29.     11/15/89 pmcm    added cases for Herc & Cpq40 mode support to TC version
  30.      1/31/90 jmd    added environment variable support
  31.      4/01/90 jmd    ansi-fied
  32.      6/06/90 jmd    changed main to return an int
  33.      9/14/90 bkd    changed to use exit(0) instead of return(0).
  34.     10/19/90 pmcm    included ostdlib.h for exit(), added return(1)
  35.     11/02/90 ted    added m6, tc++ support.
  36.     12/01/90 ted    added 'void' arg list in msgsed() prototype & declaration.
  37.     12/01/90 ted    prototyped main, except if Turbo C++.
  38.     12/04/90 ted    restored "" includes for C-scape headers (not <> includes).
  39.     12/08/90 pmcm    removed reference in note section re: defining M5
  40. */
  41.  
  42. #include <stdio.h>
  43.  
  44. #include "cscape.h"
  45. #include "ostdlib.h"
  46. #include "popdecl.h"
  47. #include "pcmode.h"
  48.  
  49. /*** Conditionally include compiler-supplied graphics library header ***/
  50.  
  51. /*-----------------------------    Microsoft C specific ---------------------*/
  52.  
  53. #ifdef M6
  54. #include <graph.h>
  55. #endif
  56.  
  57. /*----------------------------- Borland Turbo C specific -----------------*/
  58.  
  59. #ifdef __TURBOC__
  60. #include <graphics.h>
  61.  
  62. /*     
  63.     Borland Users!
  64.     BGI_PATH is directory in which initgraph looks for the 
  65.     Borland .BGI files.  You may have to change this path 
  66.     depending on how you have installed your Turbo C compiler.
  67.     Consult the Turbo C manual under initgraph for more information.
  68.     Note that the backslashes in the path name must quoted
  69.     with a preceding backslash.
  70.  
  71.     You can also define the environment variable BGIPATH
  72.     which overrides this #define:
  73.     
  74.     set BGIPATH=\tc\bgi
  75. */
  76.  
  77. #define BGI_PATH     "\\c\\TC2\\lib"
  78.  
  79. #endif
  80.  
  81. /*----------------------------- End of Compiler specific section -------------*/
  82.  
  83.  
  84.  
  85. /*** data structure to hold information about the demo ***/
  86.  
  87. typedef struct {
  88.     int        hgt;                /* display height in pixels */
  89.     int        wid;                /* display width in pixels     */
  90.     int        ncolors;            /* number of available colors */
  91.  
  92.     byte     reg;                /* colors used by menus and popups */
  93.     byte     sel;
  94.  
  95. } dgraf_struct;
  96.  
  97.  
  98. /*** Macros and definitions ***/
  99.  
  100. #define nrand(n)        (rand() % (n))
  101. #define QUIT            999
  102.  
  103.                                 /*
  104.                                 (BOX2DISP_FACTOR - 1)/(BOX2DISP_FACTOR is the
  105.                                 ratio of the draw box area to the display area
  106.                                 */
  107.  
  108. #define BOX2DISP_FACTOR    5        /* hence, draw box 2 disp area is 4:5 */
  109.  
  110. /*** Function prototypes ***/
  111.  
  112. /* Turbo C++ complains if main is prototyped */
  113. #ifndef TCP
  114. int main(void);
  115. #endif
  116.  
  117. sed_type mainsed(int *linecount, int *segcount,    int *distortion, int *pause);
  118. sed_type msgsed(void);
  119. void      draw_CrookedRays(dgraf_struct *dgrafp, int linecount, int segcount, int distort, int pause);
  120.  
  121. /* graphics routines */
  122.  
  123. int  dgraf_Init(dgraf_struct *dgrafp);
  124. void dgraf_Line(opbox *opboxp, int color);
  125. void dgraf_Rectangle(opbox *opboxp, int color);
  126. void dgraf_FillRectangle(opbox *opboxp, int color);
  127. void dgraf_Clear(void);
  128.  
  129. /*-----------------------------    MAIN -----------------------------------------*/
  130.  
  131. int main(void)
  132. {
  133.     dgraf_struct dgraf;
  134.     sed_type     sed, msg;
  135.     int         x;
  136.     int         linecount = 22;
  137.     int         segcount = 1;
  138.     int         distortion = 0;
  139.     int         pause = 0;
  140.  
  141.     /*  
  142.         Initialize the C-scape device interface:
  143.         def_ModeGraphics selects best available graphics mode
  144.     */
  145.  
  146.     if (!disp_Init(def_ModeGraphics, FNULL)) {
  147.         printf("\nDEMODRAW: -- No graphics hardware found;");
  148.         printf("\n          -- Or, there is insufficient memory to initialize the OWL ...");
  149.         printf("\n             (this program requires a large memory model compilation).\n");
  150.         exit(1);
  151.         return(1);
  152.     }
  153.  
  154.     /* map colors for 2 color video modes */
  155.     if (disp_GetColors() <= 2L) {
  156.         disp_MapMono(TRUE);
  157.     }
  158.  
  159.     /* Initialize Graphics Library */
  160.     if ((x = dgraf_Init(&dgraf)) != 0) {
  161.         disp_Close();
  162.  
  163. #ifdef __TURBOC__            /* Turbo C */
  164.     switch(x) {
  165.     case -2:
  166.         printf("\nDEMODRAW: Turbo C initgraph cannot detect graphics card.\n");
  167.         break;
  168.     case -3:
  169.         printf("\nDEMODRAW: Turbo C initgraph cannot find BGI driver file.\n");
  170.         break;
  171.     case -4:
  172.         printf("\nDEMODRAW: Turbo C initgraph does not support this video hardware.\n");
  173.         break;
  174.     case -5:
  175.         printf("\nDEMODRAW: Turbo C initgraph insufficient memory to load driver.\n");
  176.         break;
  177.     default:    
  178.         printf("\nDEMODRAW: Turbo C initgraph error %d.\n", x);
  179.         break;
  180.     }
  181. #else
  182.         printf("\nDEMODRAW: Microsoft C _setvideomode does not support this video hardware.\n");
  183. #endif
  184.  
  185.         exit(1);
  186.         return(1);
  187.     }
  188.  
  189.     /* create the main sed */
  190.     sed = mainsed(&linecount, &segcount, &distortion, &pause);
  191.     msg = msgsed();
  192.  
  193.     /* activate the sed until QUIT is selected */
  194.     while((sed_Go(sed)) != 0) {
  195.  
  196.         /* put up message sed */
  197.         sed_Repaint(msg);
  198.  
  199.         draw_CrookedRays(&dgraf, linecount, segcount, distortion, pause);
  200.  
  201.         /* remove message sed */
  202.         sed_Pop(msg);
  203.     }
  204.  
  205.     sed_Close(sed);
  206.     sed_Close(msg);
  207.  
  208.     /* close down device interface */
  209.     disp_Close();
  210.  
  211.     exit(0);
  212.     return(0);
  213. }
  214.  
  215. sed_type mainsed(int *linecount, int *segcount,    int *distortion, int *pause)
  216. {
  217.     menu_type    menu;
  218.     sed_type    sed;
  219.  
  220.     menu = menu_Open();
  221.  
  222.     menu_Printf(menu, " This is a demonstration of using a\n graphics library to draw images on\n top of a C-scape window.\n\n");
  223.     menu_Printf(menu, " Create a graphical image by\n adjusting the parameters below and\n then selecting Draw.\n ");
  224.     menu_Printf(menu, "@[37,─]\n\n@[8, ]Lines per image:\n      Segments per line:\n     Segment distortio");
  225.     menu_Printf(menu, "n:\n@[8, ]Pause per image:");
  226.  
  227.     menu_Printf(menu, "@p[9,25]@fd2[#####]",
  228.       linecount, &pint_funcs, "Number of lines in each image (1-100)", "(1,100)");
  229.     menu_Printf(menu, "@p[10,25]@fd2[#####]",
  230.       segcount, &pint_funcs, "Number of segments in each line (1-100)", "(1,100)");
  231.     menu_Printf(menu, "@p[11,25]@fd2[#####]",
  232.       distortion, &pint_funcs, "Amount to distort each segment (0-100)", "(0,100)");
  233.     menu_Printf(menu, "@p[12,25]@fd2[#####]",
  234.       pause, &pint_funcs, "Pause (in hundredths of a second) between images", "(0,1000)");
  235.     menu_Printf(menu, "@p[14,1]@fd[Draw]",
  236.       NULL, &gmenu_funcs, "Draw an image");
  237.     menu_Printf(menu, "@p[14,34]@fd2[Quit]",
  238.       NULL, &gmenu_funcs, "Leave the draw program", "0");
  239.  
  240.     menu_Flush(menu);
  241.  
  242.     sed = sed_Open(menu);
  243.     sed_SetColors(sed, 0x1e, 0x17, 0x40);
  244.  
  245.     sed_SetBorder(sed, bd_prompt);
  246.     sed_SetBorderColor(sed, 0x1b);
  247.     sed_SetBorderTitle(sed, "demodraw");
  248.     sed_SetPosition(sed, 1, 1);
  249.     sed_SetHeight(sed, 15);
  250.     sed_SetWidth(sed, 39);
  251.  
  252.     sed_Repaint(sed);
  253.  
  254.     return(sed);
  255. }
  256.  
  257. sed_type msgsed(void)
  258. {
  259.     menu_type    menu;
  260.     sed_type    sed;
  261.  
  262.     menu = menu_Open();
  263.  
  264.     menu_Printf(menu, " Press a key to return\n to the main menu.");
  265.  
  266.     menu_Flush(menu);
  267.  
  268.     sed = sed_Open(menu);
  269.     sed_SetColors(sed, 0x1e, 0x40, 0x40);
  270.  
  271.     sed_SetBorder(sed, bd_prompt);
  272.     sed_SetPosition(sed, disp_GetHeight() - 6, 0);
  273.     sed_SetHeight(sed, 2);
  274.     sed_SetWidth(sed, 23);
  275.  
  276.     return(sed);
  277. }
  278.                                   
  279. /*---------------------------- Drawing Functions -----------------------------*/
  280.  
  281. void draw_CrookedRays(dgraf_struct *dgrafp, int linecount, int segcount, int distort, int pause)
  282. /*
  283.     Draw crooked Rays in a box.
  284. */
  285. {
  286.     opbox    box, linebox, segbox;
  287.     int     i, color;
  288.     int        j, deltax, deltay, xd, yd;
  289.  
  290.     linecount = (linecount < 1) ? 1 : linecount;
  291.     segcount = (segcount < 1) ? 1 : segcount;
  292.  
  293.     /* dimension the box */
  294.     box.xmin = dgrafp->wid / BOX2DISP_FACTOR - 1;
  295.     box.ymin = dgrafp->hgt / BOX2DISP_FACTOR - 1;
  296.     box.xmax = (BOX2DISP_FACTOR - 1) * box.xmin + 1;
  297.     box.ymax = (BOX2DISP_FACTOR - 1) * box.ymin + 1;
  298.     
  299.     /* draw a border around the rectangle */
  300.     dgraf_Rectangle(&box, dgrafp->ncolors - 1);
  301.  
  302.     box.xmin++;
  303.     box.ymin++;
  304.     box.xmax--;
  305.     box.ymax--;
  306.  
  307.     /* clear a region of the screen by drawing a rectangle */
  308.     dgraf_FillRectangle(&box, 0);
  309.  
  310.     while (!kb_Check()) {
  311.  
  312.         color = nrand(dgrafp->ncolors);
  313.  
  314.         /* starting location */
  315.            linebox.xmin = nrand(box.xmax - box.xmin) + box.xmin;
  316.         linebox.ymin = nrand(box.ymax - box.ymin) + box.ymin;
  317.  
  318.         /* draw a series of rays from the starting point in the box */
  319.         for (i = 0; i < linecount; i++) {
  320.  
  321.             /* compute end point */
  322.             linebox.xmax = nrand(box.xmax - box.xmin) + box.xmin;
  323.             linebox.ymax = nrand(box.ymax - box.ymin) + box.ymin;
  324.  
  325.             /* break the line up into segments and draw them */
  326.             deltax = (linebox.xmax - linebox.xmin) / segcount;
  327.             deltay = (linebox.ymax - linebox.ymin) / segcount;
  328.  
  329.             segbox.xmin = linebox.xmin;
  330.             segbox.ymin = linebox.ymin;
  331.  
  332.             for (j = 0; j < segcount; j++) {
  333.  
  334.                 xd = (distort <= 0) ? 0 : (nrand(distort) - distort/2);
  335.                 yd = (distort <= 0) ? 0 : (nrand(distort) - distort/2);
  336.  
  337.                 segbox.xmax = segbox.xmin + deltax + xd;
  338.                 segbox.ymax = segbox.ymin + deltay + yd;
  339.  
  340.                 dgraf_Line(&segbox, (color + j) % dgrafp->ncolors);
  341.  
  342.                 segbox.xmin = segbox.xmax;
  343.                 segbox.ymin = segbox.ymax;
  344.             }
  345.         }
  346.  
  347.         if (pause > 0) {
  348.             hard_Pause(pause);
  349.         }
  350.     }
  351.  
  352.     /* Eat up the key stroke */
  353.     kb_Read();
  354.  
  355.     /* repaint C-scape windows */
  356.     disp_Repaint();
  357. }
  358.  
  359. /*---------------------------------------------------------------------------*/
  360.  
  361. /*     
  362.     Portable graphics routines:
  363.     The following routines are defined for the various graphics libraries
  364.     supported.
  365. */
  366.  
  367. /*-----------------------------    Microsoft C specific ---------------------*/
  368.  
  369. #ifdef M6            /* Microsoft */
  370.  
  371. int dgraf_Init(dgraf_struct *dgrafp)
  372. /*
  373.     Microsoft version.
  374.  
  375.     Initialize the graphics library.
  376.     Initialize demo data.
  377.  
  378.     Returns 
  379.             0     if successful 
  380.             -1  if the video hardware is unsupported by MS.
  381.  
  382. */
  383.  
  384. {
  385.     struct    videoconfig config;        /* Microsoft defined structure */
  386.     opbox   box;
  387.     int     mode;
  388.  
  389.     switch(pc_GetMode()) {
  390.  
  391.        case 0x13:
  392.         mode = _MRES256COLOR;
  393.         break;
  394.  
  395.        case 0x12:
  396.         mode = _VRES16COLOR;
  397.         break;
  398.  
  399.        case 0x11:
  400.         mode = _VRES2COLOR;
  401.         break;
  402.  
  403.        case 0x10:
  404.         mode = _ERESCOLOR;
  405.         break;
  406.  
  407.        case 0x0f:
  408.         mode = _ERESNOCOLOR;
  409.         break;
  410.  
  411.        case 0x0e:
  412.         mode = _HRES16COLOR;
  413.         break;
  414.  
  415.        case 0x0d:
  416.         mode = _MRES16COLOR;
  417.         break;
  418.  
  419.        case 0x06:
  420.         mode = _HRESBW;
  421.         break;
  422.  
  423.        case 0x05:
  424.     case 0x04:
  425.         mode = _MRESNOCOLOR;
  426.         break;
  427.  
  428.     case 0x10A:
  429.     case 0x10B:
  430.         /* 
  431.         The    Hercules graphics card is not supported by Microsoft 5.1.  _HERCMONO
  432.         is in their graphic.h but does not work with _setvideomode, below.
  433.         */
  434.         mode = _HERCMONO;
  435.         break;
  436.  
  437.     case 0x140:
  438.         /* Compaq Plasma 40 not supported by Microsoft, fall through ... */
  439.  
  440.     default:
  441.         return(-1);
  442.     }
  443.                          
  444.     /* initialize Microsoft video mode */
  445.     if ((_setvideomode(mode)) == 0) {
  446.         return(-1);    /* unsupported hardware configuration */
  447.     }
  448.  
  449.     /* initialize config structure */
  450.     _getvideoconfig(&config);
  451.  
  452.     dgraf_Clear();
  453.  
  454.     /* Set clip region to avoid drawing outside of box */
  455.     box.xmin = config.numxpixels / BOX2DISP_FACTOR - 1;
  456.     box.ymin = config.numypixels / BOX2DISP_FACTOR - 1;
  457.     box.xmax = (BOX2DISP_FACTOR - 1) * box.xmin + 1;
  458.     box.ymax = (BOX2DISP_FACTOR - 1) * box.ymin + 1;
  459.  
  460.     _setcliprgn(box.xmin, box.ymin, box.xmax, box.ymax);
  461.  
  462.     /* set up dgraf data */
  463.  
  464.     dgrafp->hgt = config.numypixels;
  465.     dgrafp->wid = config.numxpixels;
  466.     dgrafp->ncolors = config.numcolors;
  467.  
  468.     /* Set up the menu colors */
  469.     if (disp_GetColors() > 2L) {
  470.         dgrafp->reg  = 0x34;
  471.         dgrafp->sel = 0x43;
  472.     }
  473.     else {
  474.         dgrafp->reg  = 0x10;
  475.         dgrafp->sel = 0x01;
  476.     }
  477.  
  478.     return(0);
  479. }
  480.  
  481. void dgraf_Line(opbox *opboxp, int color)
  482. /*
  483.     Draw a line from
  484.     (opboxp->xmin, opboxp->ymax) to (opboxp->xmax, opboxp->ymax)
  485.     with color color.
  486.  
  487.     an opbox is a datastructure defined by C-scape.
  488.  
  489.     Microsoft version.
  490. */
  491. {
  492.     _setcolor(color);
  493.     _moveto(opboxp->xmin, opboxp->ymin);
  494.     _lineto(opboxp->xmax, opboxp->ymax);
  495. }
  496.  
  497. void dgraf_Rectangle(opbox *opboxp, int color)
  498. /*
  499.     Draw a rectangle with corners
  500.     (opboxp->xmin, opboxp->ymax) (opboxp->xmax, opboxp->ymax)
  501.     with color color.
  502.  
  503.     Microsoft version.
  504. */
  505. {
  506.     _setcolor(color);
  507.     _rectangle(_GBORDER, opboxp->xmin, opboxp->ymin, opboxp->xmax, opboxp->ymax);
  508. }
  509.  
  510. void dgraf_FillRectangle(opbox *opboxp, int color)
  511. /*
  512.     Draw a filled rectangle with corners
  513.     (opboxp->xmin, opboxp->ymax) (opboxp->xmax, opboxp->ymax)
  514.     with color color.
  515.  
  516.     Microsoft version.
  517. */
  518. {
  519.     _setcolor(color);
  520.     _rectangle(_GFILLINTERIOR, opboxp->xmin, opboxp->ymin, opboxp->xmax, opboxp->ymax);
  521. }
  522.  
  523. void dgraf_Clear()
  524. /*
  525.     Clear the display.
  526.  
  527.     Microsoft version.
  528. */
  529. {
  530.     _clearscreen(_GVIEWPORT);
  531. }
  532.  
  533. #endif
  534.  
  535.  
  536. /*----------------------------- Borland Turbo C specific -----------------*/
  537.  
  538.  
  539. #ifdef __TURBOC__            /* Turbo C */
  540.  
  541. /* compensation for turbo view window */
  542.  
  543. static int turbox, turboy;
  544.  
  545. int dgraf_Init(dgraf_struct *dgrafp)
  546. /*
  547.     Turbo C version.
  548.  
  549.     Initialize the graphics library.
  550.     Initialize demo data.
  551.  
  552.     Returns 
  553.             0 if successful.
  554.  
  555.             turbo initgraph error code if not successful:
  556.                 -2 cannot detect graphics card
  557.                 -3 cannot find driver file
  558.                 -4 invalid driver (unsupported video mode)
  559.                 -5 insufficient memory to load driver
  560.                 
  561. */
  562.  
  563. {
  564.     int        mode, driver;
  565.     opbox   box;
  566.     char   *bgipath;    
  567.  
  568.     switch(pc_GetMode()) {
  569.  
  570.        case 0x12:
  571.         driver = VGA;
  572.         mode = VGAHI;
  573.         break;
  574.  
  575.        case 0x11:
  576.         driver = MCGA;
  577.         mode = MCGAHI;
  578.         break;
  579.  
  580.        case 0x10:
  581.         driver = EGA;
  582.         mode = EGAHI;
  583.         break;
  584.  
  585.        case 0x0f:
  586.         driver = EGAMONO;
  587.         mode = EGAMONOHI;
  588.         break;
  589.  
  590.        case 0x0e:
  591.         driver = EGA;
  592.         mode = EGALO;
  593.         break;
  594.  
  595.        case 0x06:
  596.         driver = CGA;
  597.         mode = CGAHI;
  598.         break;
  599.  
  600.        case 0x05:
  601.     case 0x04:
  602.         driver = CGA;
  603.         mode = CGAC1;
  604.         break;
  605.  
  606.     case 0x10A:
  607.     case 0x10B:
  608.         driver = HERCMONO;
  609.         mode = HERCMONOHI;
  610.         break;
  611.  
  612.     case 0x140:    /* Compaq plasma mode 40 */
  613.         driver = ATT400;
  614.         mode = ATT400HI;
  615.         break;
  616.  
  617.        case 0x13:    /* 320x200  (pc_Mode13) 256 color VGA/MCGA, fall through... */
  618.  
  619.        case 0x0d:    /* 320x200  (pc_ModeD)  16 color EGA, fall through...       */
  620.  
  621.     default:
  622.                 /* Not supported by TC -- return code for invalid driver    */
  623.         return(-4);
  624.     }
  625.  
  626.     /* test for environment variable */
  627.     if ((bgipath = getenv("BGIPATH")) == NULL) {
  628.         bgipath = BGI_PATH;
  629.     }
  630.  
  631.     initgraph(&driver, &mode, bgipath);
  632.  
  633.     if (driver < 0) {
  634.         /* initgraph failed */
  635.         return(driver);
  636.     }
  637.  
  638.     dgraf_Clear();
  639.  
  640.     /* Set clip region to avoid drawing outside of box */
  641.     box.xmin = getmaxx() / BOX2DISP_FACTOR - 1;
  642.     box.ymin = getmaxy() / BOX2DISP_FACTOR - 1;
  643.     box.xmax = (BOX2DISP_FACTOR - 1) * box.xmin + 1;
  644.     box.ymax = (BOX2DISP_FACTOR - 1) * box.ymin + 1;
  645.  
  646.     setviewport(box.xmin, box.ymin, box.xmax, box.ymax, TRUE);
  647.  
  648.     /* all turbo rouintes are relative to viewport,
  649.        use global variables to compensate for this
  650.     */
  651.     turbox = box.xmin;    
  652.     turboy = box.ymin;    
  653.  
  654.     /* set up dgraf data */
  655.  
  656.     dgrafp->hgt = getmaxy();
  657.     dgrafp->wid = getmaxx();
  658.     dgrafp->ncolors = getmaxcolor() + 1;
  659.  
  660.     /* Set up the menu colors */
  661.     if (disp_GetColors() > 2L) {
  662.         dgrafp->reg  = 0x34;
  663.         dgrafp->sel = 0x43;
  664.     }
  665.     else {
  666.         dgrafp->reg  = 0x10;
  667.         dgrafp->sel = 0x01;
  668.     }
  669.  
  670.     return(0);
  671. }
  672.  
  673. void dgraf_Line(opbox *opboxp, int color)
  674. /*
  675.     Draw a line from
  676.     (opboxp->xmin, opboxp->ymax) to (opboxp->xmax, opboxp->ymax)
  677.     with color color.
  678.  
  679.     an opbox is a datastructure defined by C-scape.
  680.  
  681.     Turbo C version.
  682. */
  683. {
  684.     setcolor(color);
  685.     setlinestyle(SOLID_LINE, 0, THICK_WIDTH);
  686.  
  687.     line(opboxp->xmin - turbox, opboxp->ymin - turboy, 
  688.          opboxp->xmax - turbox, opboxp->ymax - turboy);
  689. }
  690.  
  691. void dgraf_Rectangle(opbox *opboxp, int color)
  692. /*
  693.     Draw a rectangle with corners
  694.     (opboxp->xmin, opboxp->ymax) (opboxp->xmax, opboxp->ymax)
  695.     with color color.
  696.  
  697.     Turbo C version.
  698. */
  699. {
  700.     setcolor(color);
  701.     rectangle(opboxp->xmin - turbox, opboxp->ymin - turboy, 
  702.               opboxp->xmax - turbox, opboxp->ymax - turboy);
  703. }
  704.  
  705. void dgraf_FillRectangle(opbox *opboxp, int color)
  706. /*
  707.     Draw a filled rectangle with corners
  708.     (opboxp->xmin, opboxp->ymax) (opboxp->xmax, opboxp->ymax)
  709.     with color color.
  710.  
  711.     Turbo C version.
  712. */
  713. {
  714.     setfillstyle(SOLID_FILL, color);
  715.     bar(opboxp->xmin - turbox, opboxp->ymin - turboy, 
  716.         opboxp->xmax - turbox, opboxp->ymax - turboy);
  717. }
  718.  
  719. void dgraf_Clear()
  720. /*
  721.     Clear the display.
  722.  
  723.     Turbo C version.
  724. */
  725. {
  726.     clearviewport();
  727. }
  728.  
  729. #endif
  730.  
  731.  
  732.