home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Devil's Doorknob BBS Capture (1996-2003)
/
devilsdoorknobbbscapture1996-2003.iso
/
Dloads
/
PROGRAMM
/
PCX_LIB.ZIP
/
WR_DEMO.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-04-03
|
7KB
|
210 lines
/*
*************************************************************************
*
* WR_DEMO.C - PCX_LIB PCX Image File Write Demonstration Program
*
* Version: 1.00B
*
* History: 91/02/14 - Created
* 91/04/01 - Release 1.00A
* 91/04/06 - Release 1.00B
*
* Compiler: Microsoft C V6.0
*
* Author: Ian Ashdown, P.Eng.
* byHeart Software
* 620 Ballantree Road
* West Vancouver, B.C.
* Canada V7S 1W3
* Tel. (604) 922-6148
* Fax. (604) 987-7621
*
* Copyright: Public Domain
*
*************************************************************************
*/
/* INCLUDE FILES */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <graph.h>
#include "pcx_ext.h"
/* FORWARD REFERENCES */
/* GLOBALS */
static char *use_msg[] = /* Program usage message */
{
" Synopsis: This public domain program displays a Paintbrush (R) PCX",
"-format\n image file, then captures the image directly fr",
"om the display\n and writes it to the file PCX_DEMO.PCX.",
"\n\n Usage: WR_DEMO filename video_mode\n\n where \"",
"filename\" is the name of the PCX-format image file to be\n ",
" written and \"video_mode\" is an MS-DOS video mode. Valid values",
"\n are:\n\n 4 - 320 x 200 4-color CGA\n ",
" 5 - 320 x 200 4-color CGA (color burst off)\n ",
" 6 - 640 x 200 2-color CGA\n 13 - 320 x 200",
" 16-color EGA/VGA\n 14 - 640 x 200 16-color EGA/VGA\n",
" 15 - 640 x 350 2-color EGA/VGA\n 16 ",
"- 640 x 350 16-color EGA/VGA\n 17 - 640 x 480 2-color",
" VGA\n 18 - 640 x 480 16-color VGA\n 19",
" - 320 x 200 256-color VGA\n",
(unsigned char *) NULL
};
/* PUBLIC FUNCTIONS */
/*
*************************************************************************
*
* MAIN - Executive Function
*
* Purpose: To write a PCX-format image file.
*
* Setup: int main
* (
* int argc,
* char **argv
* )
*
* Where: argc is the number of command-line arguments.
* argv is a pointer to an array of command-line argument
* strings.
*
* Return: 0 if successful; otherwise 2.
*
* Note: Usage is:
*
* WR_DEMO filename video_mode
*
* where:
*
* filename is the name of a PCX-format image file.
* video_mode is the MS-DOS video mode. Valid values are:
*
* 4 - 320 x 200 4-color CGA
* 5 - 320 x 200 4-color CGA (color burst off)
* 6 - 640 x 200 2-color CGA
* 13 - 320 x 200 16-color EGA/VGA
* 14 - 640 x 200 16-color EGA/VGA
* 15 - 640 x 350 2-color EGA/VGA
* 16 - 640 x 350 16-color EGA/VGA
* 17 - 640 x 480 2-color VGA
* 18 - 640 x 480 16-color VGA
* 19 - 320 x 200 256-color VGA
*
*************************************************************************
*/
int main
(
int argc,
char **argv
)
{
int i; /* Scratch counter */
int vmode; /* Video mode */
BOOL status = FALSE; /* Return status */
PCX_VSB *vsbp; /* Video services data save buffer ptr */
vsbp = (PCX_VSB *) NULL; /* Initialize video services buffer ptr */
/* Display program title */
puts("\nWR_DEMO - PCX Image File Write Demonstration Program\n");
if (argc == 3) /* Check for filename and video mode parameters */
{
vmode = atoi(argv[2]); /* Get the video mode */
/* Validate the video mode (must be valid MS-DOS graphics mode) */
if ((vmode >= 4 && vmode <= 6) || (vmode >= 13 && vmode <= 19))
status = TRUE;
}
if (status == TRUE)
{
if (_setvideomode(vmode) == 0) /* Set the video mode */
{
/* Report error */
fprintf(stderr,
"ERROR: could not set display adapter to mode %d.\n", vmode);
return (2);
}
if (vmode >= 13 && vmode <= 18) /* EGA-compatible video mode ? */
{
if (pcx_isvga() == TRUE) /* Is a VGA display present ? */
{
/* An EGA display adapter is present - instantiate a Dynamic */
/* Save Area buffer to capture the color palette settings each */
/* time the palette is updated */
status = pcx_init_dsa(&vsbp);
}
}
if (status == TRUE)
{
/* Read and display the file (assume video page zero) */
if ((status = pcx_read(argv[1], vmode, 0)) == TRUE)
{
/* Capture the entire screen as a PCX-format file */
status = pcx_write("PCX_DEMO.PCX", vmode, 0, 640, 480);
(void) _setvideomode(_DEFAULTMODE); /* Reset the video mode */
if (status == FALSE)
{
/* Report error */
fprintf(stderr,
"\nWR_DEMO - PCX Image File Write Demonstration");
fprintf(stderr,
" Program\n\nERROR: Could not write file %s.\n", argv[1]);
}
}
else
{
(void) _setvideomode(_DEFAULTMODE); /* Reset the video mode */
/* Report error */
fprintf(stderr, "\nWR_DEMO - PCX Image File Write Demonstration");
fprintf(stderr, " Program\n\nERROR: Could not read file %s.\n",
argv[1]);
}
/* Free the Dynamic Save Area (if necessary) */
if (vsbp != (PCX_VSB *) NULL)
pcx_free_dsa(vsbp);
}
else
{
(void) _setvideomode(_DEFAULTMODE); /* Reset the video mode */
fputs("ERROR: out of memory.\n", stderr); /* Report error */
}
}
else /* Display usage information */
{
while (use_msg[i] != (unsigned char *) NULL)
fputs(use_msg[i++], stderr);
}
if (status == TRUE)
return (0);
else
return (2);
}