graphics.hlp (Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
SINE.C
                                             Up Contents Index Back
────────────────────────────────────────────────────────────────────────────
 
/*  SINE.C: Illustrates basic graphics commands */
#include <stdio.h>
#include <stdlib.h>
#include <graph.h>
#include <math.h>
#include <conio.h>
#define PI 3.14159
 
void graphics_mode( void );
void draw_lines( void );
void sine_wave( void );
void draw_shapes( void );
void end_program( void );
int newx( int );
int newy( int );
 
struct videoconfig myscreen;
int maxx, maxy;
unsigned char diagmask[8] =
{ 0x93, 0xC9, 0x64, 0xB2, 0x59, 0x2C, 0x96, 0x4B };
unsigned char linemask[8] =
{ 0xFF, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0xCC };
 
main()
{
   graphics_mode();
   draw_lines();
   sine_wave();
   draw_shapes();
   end_program();
}
 
void graphics_mode( void )
{
   _getvideoconfig( &myscreen );
   switch( myscreen.adapter )
   {
      case _CGA:
         _setvideomode( _HRESBW );
         break;
      case _OCGA:
         _setvideomode( _ORESCOLOR );
         break;
      case _EGA:
      case _OEGA:
         if( myscreen.monitor == _MONO )
            _setvideomode( _ERESNOCOLOR );
         else
            _setvideomode( _ERESCOLOR );
         break;
      case _VGA:
      case _OVGA:
      case _MCGA:
         _setvideomode( _VRES2COLOR );
         break;
      case _HGC:
         _setvideomode( _HERCMONO );
         break;
      default:
         printf( "This program requires a CGA, EGA, VGA, or Hercules card\n" );
         exit( 0 );
   }
   _getvideoconfig( &myscreen );
   maxx = myscreen.numxpixels - 1;
   maxy = myscreen.numypixels - 1;
}
 
int newx( int xcoord )
{
   int nx;
   float tempx;
   tempx = ((float) maxx)/ 1000.0;
   tempx = ((float) xcoord) * tempx + 0.5;
   return( (int) tempx );
}
 
int newy( int ycoord )
{
   int ny;
   float tempy;
   tempy = ((float) maxy)/ 1000.0;
   tempy = ((float) ycoord) * tempy + 0.5;
   return( (int) tempy );
}
 
void sine_wave( void )
{
   int locx, locy;
   double i, rad;
 
   for( i = 0.0; i < 1000.0; i += 3.0 )
   {
      rad = -sin( (PI * (float) i) / 250.0 );
      locx = newx( (int) i );
      locy = newy( (int) (rad * 250.0) );
      _setpixel( locx, locy );
   }
}
 
void draw_shapes( void )
{
   _setlinestyle( 0xFFFF );
   _setfillmask( diagmask );
   _rectangle( _GBORDER, newx(50), newy(-325), newx(200), newy(-425) );
   _rectangle( _GFILLINTERIOR, newx(550), newy(-325), newx(700), newy(-425) );
 
   _setfillmask( linemask );
   _ellipse( _GBORDER, newx(50), newy(325), newx(200), newy(425) );
   _ellipse( _GFILLINTERIOR, newx(550), newy(325), newx(700), newy(425) );
}
 
void end_program( void )
{
   getch();
   _setvideomode( _DEFAULTMODE );
}
 
void draw_lines( void )
{
   _rectangle( _GBORDER, 0, 0, maxx, maxy );
   /* _setcliprgn( 20, 20, maxx - 20, maxy - 20 ); */
   _setvieworg( 0, newy( 500 ) );
 
   _moveto( 0, 0 );
   _lineto( newx( 1000 ), 0 );
   _setlinestyle( 0xAA3C );
   _moveto( 0, newy( -250) );
   _lineto( newx( 1000 ), newy( -250 ) );
 
   _setlinestyle( 0x8888 );
   _moveto( 0, newy( 250 ) );
   _lineto( newx( 1000 ), newy( 250 ) );
}