SVGADEMO.C
资源名称:SVGACC10.zip [点击查看]
上传用户:kammenn
上传日期:2007-06-26
资源大小:210k
文件大小:14k
源码类别:
GDI/图象编程
开发平台:
C/C++
- /****************************************************************************
- 'SVGACC' A Super Vga Graphics Library for use with Microsoft and
- Borland C/C++
- Copyright 1993-1994 by Stephen L. Balkum and Daniel A. Sill
- GIF and 'Graphics Intechange Format' are trademarks (tm) of
- Compuserve, Incorporated, an H&R Block Company.
- **************** UNREGISTERD SHAREWARE VERSION ***********************
- * FOR EVUALATION ONLY. NOT FOR RESALE IN ANY FORM. SOFTWARE WRITTEN *
- * USING THIS UNREGISTERED SHAREWARE GRAPHICS LIBRARY MAY NOT BY SOLD *
- * OR USED FOR ANY PURPOSE OTHER THAN THE EVUALTION OF THIS LIBRARY. *
- **********************************************************************
- **************** NO WARRANTIES AND NO LIABILITY **********************
- * Stephen L. Balkum and Daniel A. Sill provide no warranties, either *
- * expressed or implied, of merchantability, or fitness, for a *
- * particular use or purpose of this SOFTWARE and documentation. *
- * In no event shall Stephen L. Balkum or Daniel A. Sill be held *
- * liable for any damages resulting from the use or misuse of the *
- * SOFTWARE and documentation. *
- **********************************************************************
- ************** U.S. GOVERNMENT RESTRICTED RIGHTS *********************
- * Use, duplication, or disclosure of the SOFTWARE and documentation *
- * by the U.S. Government is subject to the restictions as set forth *
- * in subparagraph (c)(1)(ii) of the Rights in Technical Data and *
- * Computer Software cluse at DFARS 252.227-7013. *
- * Contractor/manufacturer is Stephen L. Balkum and Daniel A. Sill, *
- * P.O. Box 7704, Austin, Texas 78713-7704 *
- **********************************************************************
- **********************************************************************
- * By using this SOFTWARE or documentation, you agree to the above *
- * terms and conditions. *
- **********************************************************************
- ***************************************************************************/
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #include <dos.h>
- #include "svgacc.h"
- #include "svgademo.h"
- void main(void) {
- int startvideomode;
- int i, max, ky;
- int mjv, mnv, tp;
- int cpu, videomemory;
- int mouse, joystick;
- int res;
- int offset, colr;
- float mypi;
- char dummy;
- char buf[TITLEN];
- char *dumptr;
- /*
- * Save the starting videomode and set it to mode 3.
- */
- startvideomode = videomodeget();
- restext();
- screenclear();
- /*
- * Move the DOS cursor to the top left to start the program and say hello
- */
- screengoto(11,0);
- printf("/*SVGACC.LIB/* A SuperVGA Graphics Library for use withn");
- screengoto(23,1);
- printf("Microsoft and Borland C/C++n");
- screengoto(9,2);
- printf("Copyright 1993-1994 by Stephen L. Balkum and Daniel A. Silln");
- screengoto(23,11);
- printf("Demonstration/Example Programn");
- screengoto(0,22);
- printf("press a key to begin the demo...n");
- getkey();
- screenclear();
- /*
- * Let's id the processor first as the library requires a 386 or better.
- */
- screengoto(0,0);
- cpu = whichcpu();
- if (cpu < 386) {
- printf("Sorry, this library requires an 80386 or better processor.n");
- printf("Processor is identified as an 80%d.n", cpu);
- printf("Demo program will be terminated.nn");
- printf("press a key...n");
- getkey();
- videomodeset(startvideomode);
- exit(0);
- }
- /*
- * Let's id the video card/chip as the library requires a SuperVGA adapter.
- */
- switch(whichvga()) {
- case ACUMOS:
- sprintf(buf,"Acumos AVGA2/3 SuperVGA");
- break;
- case ATI:
- sprintf(buf,"ATI Technologies 18/28/38/68800 SuperVGA");
- break;
- case AHEADA:
- sprintf(buf,"Ahead V5000 Ver A SuperVGA");
- break;
- case AHEADB:
- sprintf(buf,"Ahead V5000 Ver B SuperVGA");
- break;
- case CHIPSTECH:
- sprintf(buf,"Chips and Technologies 82C450/1/2/3/5/6/7 SuperVGA");
- break;
- case CIRRUS:
- sprintf(buf,"Cirrus Logic CL-GD 5xx,6xx,28xx,54xx,62xx SuperVGA");
- break;
- case EVEREX:
- sprintf(buf,"Everex EV236/6xx Micro Enhancer SuperVGA");
- break;
- case GENOA:
- sprintf(buf,"Genoa 61/62/63/64/6600 SuperVGA");
- break;
- case NCR:
- sprintf(buf,"NCR 77C21/22/22E/22E+ SuperVGA");
- break;
- case OAKTECH:
- sprintf(buf,"Oak Technologies OTI-037/67/77/87C SuperVGA");
- break;
- case PARADISE:
- sprintf(buf,"Paradise/Western Digital PVGA1A,WD90C00/1x/2x/3x SuperVGA");
- break;
- case REALTEK:
- sprintf(buf,"Realtek RT3106 SuperVGA");
- break;
- case TRIDENT:
- sprintf(buf,"Trident 8800CS,8900B/C/CL/CX,90x0 SuperVGA");
- break;
- case TSENG3:
- sprintf(buf,"Tseng Labs ET3000-AX/BX/BP SuperVGA");
- break;
- case TSENG4:
- sprintf(buf,"Tseng Labs ET4000/W32/W32I SuperVGA");
- break;
- case VESA:
- sprintf(buf,"VESA compatible SuperVGA");
- break;
- case VIDEO7:
- sprintf(buf,"Video 7 HT-208/16 SuperVGA");
- break;
- case AVANCE:
- sprintf(buf,"Avance Logic AL2101 SuperVGA");
- break;
- case MXIC:
- sprintf(buf,"MXIC MX68000/10 SuperVGA");
- break;
- case PRIMUS:
- sprintf(buf,"Primus P2000 SuperVGA");
- break;
- default:
- printf("Microprocessor is identified as an 80%d.n", cpu);
- printf("Sorry, unable to identify video card or it is not a SuperVGA video adapter.n");
- printf("Demo program will be terminated.nn");
- printf("press a key...n");
- getkey();
- videomodeset(startvideomode);
- exit(0);
- }
- printf("Microprocessor is identified as an 80%d.n", cpu);
- fontsystem();
- printf("Video card/chip is identified as %s.n",&buf);
- /*
- * Let's see the how much memory is installed on the super vga adapter.
- */
- videomemory = whichmem();
- if (videomemory < 1) {
- printf("Sorry, unable to identify the amount of installed video memory.n");
- printf("Demo program will be terminated.nn");
- printf("press a key...n");
- getkey();
- videomodeset(startvideomode);
- exit(0);
- } else
- printf("Installed video memory identified as %dkb.n", videomemory);
- /*
- * Let's tell the user what the highest resolution that the video card
- * and its installed memory card is capable of. The monitor must be able
- * to support those modes too !
- */
- printf("Video card and installed memory is capable of the following resolutions:n");
- if (videomemory > 1023) {
- printf(" 320x200 in 256 colorsn");
- printf(" 640x400 in 256 colorsn");
- printf(" 640x480 in 256 colorsn");
- printf(" 800x600 in 256 colorsn");
- printf(" 1024x768 in 256 colorsn");
- max = 4;
- } else if (videomemory > 511) {
- printf(" 320x200 in 256 colorsn");
- printf(" 640x400 in 256 colorsn");
- printf(" 640x480 in 256 colorsn");
- printf(" 800x600 in 256 colorsn");
- max = 3;
- } else {
- printf(" 320x200 in 256 colorsn");
- printf(" 640x400 in 256 colorsn");
- max = 1;
- }
- printf("nPlease keep in mind that not all monitors support all resolutions.nn");
- /*
- * Let's look for a mouse. if we find one, tell all about it
- */
- mouse = whichmouse();
- if (mouse > 0) {
- mouseinfo(&mjv, &mnv, &tp, &i);
- switch (tp) {
- case 1:
- sprintf(buf,"bus mouse");
- break;
- case 2:
- sprintf(buf,"serial mouse");
- break;
- case 3:
- sprintf(buf,"Inport mouse");
- break;
- case 4:
- sprintf(buf,"PS/2 mouuse");
- break;
- case 5:
- sprintf(buf,"HP mouse");
- break;
- default:
- sprintf(buf,"unknown type");
- }
- printf("Microsoft compatible %s detected with %d buttons on IRQ %d.n", &buf, mouse, i);
- printf("Software driver version is %d.%d (Microsoft equivalent version).nn", mjv, mnv);
- } else
- printf("No Microsoft compatible mouse detected.nn");
- /*
- * Let's look for joysticks
- */
- joystick = whichjoystick();
- switch (joystick) {
- case -1:
- printf("No joystick port detected or no joystick BIOS support present.nn");
- break;
- case 0:
- printf("No joystick detectednn");
- break;
- case 1:
- printf("Joystick A is present and available.nn");
- break;
- case 2:
- printf("Joystick B is present and available.nn");
- break;
- case 3:
- printf("Both Joystick A and Joystick B are present and available.nn");
- break;
- }
- printf("press a key...n");
- getkey();
- /*
- * Let's get down to business
- */
- res = 1;
- endit = 0;
- ky=0;
- /*
- * Init alternate color palettes
- */
- res320();
- palget(orgpal, 0, 255);
- palcopy(orgpal,pal,0,255);
- palcopy(orgpal,pal2,0,255);
- mypi=(float)(8 * atan(1) / 240);
- offset = 16;
- for (colr=0;colr<240;colr++,offset++) {
- pal[offset].r = (char)(32.0 + sin((colr + 0) * mypi) * 31.0);
- pal[offset].g = (char)(32.0 + sin((colr + 80) * mypi) * 31.0);
- pal[offset].b = (char)(32.0 + sin((colr + 160) * mypi) * 31.0);
- pal2[offset].r = (char)(32.0 + sin((colr + 10) * mypi) * 31.0);
- pal2[offset].g = (char)(32.0 + sin((colr + 30) * mypi) * 31.0);
- pal2[offset].b = (char)(32.0 + sin((colr + 50) * mypi) * 31.0);
- }
- restext();
- /*
- * Here is the main selector loop
- */
- while (endit == 0) {
- screenclear();
- switch (res) {
- case 1:
- sprintf(buf,"320x200x256");
- break;
- case 2:
- sprintf(buf,"640x400x256");
- break;
- case 3:
- sprintf(buf,"640x480x256");
- break;
- case 4:
- sprintf(buf,"800x600x256");
- break;
- case 5:
- sprintf(buf,"1024x768x256");
- }
- printf("Please select the demo you would like to see in the %s resolution:nn",&buf);
- printf("(0) Exit This Programnn");
- printf("(1) Demo #1 The Primitive Drawing Routinesn");
- printf("(2) Demo #2 The Clipping Capabilitiesn");
- printf("(3) Demo #3 The Fill Routinesn");
- printf("(4) Demo #4 The Palette Routinesn");
- printf("(5) Demo #5 The Block Routinesn");
- printf("(6) Demo #6 The Text Routinesn");
- printf("(7) Demo #7 The Scrolling Routinesn");
- printf("(8) Demo #8 The GIF (tm) Routinesn");
- printf("(9) Demo #9 The Mouse Routinesn");
- printf("(10) Demo #10 The Joystick Routinesn");
- printf("(11) Demo #11 The Two Dimensional Routinesn");
- printf("(12) Demo #12 The Three Dimensional Routinesn");
- printf("(13) The Grand Tour of All Demosnn");
- printf("(14) Use 320x200 in 256 colorsn");
- printf("(15) Use 640x400 in 256 colorsn");
- max = 14;
- if (videomemory > 511) {
- printf("(16) Use 640x480 in 256 colorsn");
- printf("(17) Use 800x600 in 256 colorsn");
- max = 17;
- }
- if (videomemory > 1023) {
- printf("(18) Use 1024x768 in 256 colorsn");
- max = 18;
- }
- printf("nYour Choice: ");
- for (i=0;i<3;i++) {
- dummy = (char)getch();
- switch (dummy) {
- case 13:
- if (i == 0)
- i--;
- else {
- buf[i]=' ';
- i=2;
- }
- break;
- case 8:
- i--;
- if (i > (-1)) {
- printf("b b");
- i--;
- }
- break;
- default:
- if ((dummy < '0') || (dummy > '9'))
- i--;
- else if (i < 2) {
- printf("%c",dummy);
- buf[i] = dummy;
- } else
- buf[i] = ' ';
- }
- }
- ky=(int)strtol(buf,&dumptr,10);
- if (ky > max)
- ky = 99;
- if((ky > 0) && (ky < 14))
- switch (res) {
- case 1:
- res320();
- break;
- case 2:
- res640l();
- break;
- case 3:
- res640();
- break;
- case 4:
- res800();
- break;
- case 5:
- res1024();
- break;
- }
- switch (ky) {
- case 0:
- endit = 1;
- break;
- case 1:
- doprims();
- break;
- case 2:
- doclip();
- break;
- case 3:
- dofill();
- break;
- case 4:
- dopal();
- break;
- case 5:
- doblock();
- break;
- case 6:
- dotext();
- break;
- case 7:
- doscroll();
- break;
- case 8:
- dogif();
- break;
- case 9:
- domouse();
- break;
- case 10:
- dojoystick();
- break;
- case 11:
- do2d();
- break;
- case 12:
- do3d();
- break;
- case 13:
- doall();
- break;
- case 14:
- res = 1;
- break;
- case 15:
- res = 2;
- break;
- case 16:
- res = 3;
- break;
- case 17:
- res = 4;
- break;
- case 18:
- res = 5;
- break;
- default:
- ;
- }
- restext();
- }
- videomodeset(startvideomode);
- }
- /**********
- * GETKEY *
- **********/
- char getkey(void)
- {
- char ret;
- beep();
- ret = (char)getch();
- if ( (ret == 'Q') || (ret == 'q') )
- endit = 1;
- if (ret == 'Q')
- ret = 'q';
- if (ret == 'S')
- ret = 's';
- return(ret);
- }
- /*********
- * DOALL *
- *********/
- void doall(void)
- {
- if(doprims()=='q')
- return;
- if(doclip()=='q')
- return;
- if(dofill()=='q')
- return;
- if(dopal()=='q')
- return;
- if(doblock()=='q')
- return;
- if(dotext()=='q')
- return;
- if(doscroll()=='q')
- return;
- if(dogif()=='q')
- return;
- if(domouse()=='q')
- return;
- if(dojoystick()=='q')
- return;
- if(do2d()=='q')
- return;
- if(do3d()=='q')
- return;
- return;
- }
- /***************
- * SCREENCLEAR *
- ***************/
- void screenclear(void)
- {
- union REGS regs;
- regs.h.ah = 0x07;
- regs.h.al = 0x00;
- regs.h.ch = 0;
- regs.h.cl = 0;
- regs.h.dh = 24;
- regs.h.dl = 79;
- regs.h.bh = 7;
- int86(0x10, ®s, ®s);
- screengoto(1,1);
- }
- /**************
- * SCREENGOTO *
- **************/
- void screengoto(int x, int y)
- {
- union REGS regs;
- regs.h.ah = 0x02;
- regs.h.bh = 0;
- regs.h.dh = (unsigned char)y;
- regs.h.dl = (unsigned char)x;
- int86(0x10, ®s, ®s);
- }
- /********
- * BEEP *
- ********/
- void beep(void)
- {
- int cont;
- outp(0x43,0xB6);
- outp(0x42,0xA9);
- outp(0x42,0x06);
- cont = inp(0x61);
- outp(0x61,cont | 0x03);
- sdelay(4);
- outp(0x61,cont);
- }