First commit 16/09/1994
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								BGI/DEMO.EXE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								BGI/DEMO.EXE
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										108
									
								
								BGI/INITSVGA.C
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								BGI/INITSVGA.C
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,108 @@
 | 
			
		||||
/* Sample program that initializes the SuperVGA driver */
 | 
			
		||||
 | 
			
		||||
#include <graphics.h>
 | 
			
		||||
 | 
			
		||||
extern int far Svga16_fdriver[];
 | 
			
		||||
extern int far Svga256_fdriver[];
 | 
			
		||||
extern int far Twk16_fdriver[];
 | 
			
		||||
extern int far Twk256_fdriver[];
 | 
			
		||||
 | 
			
		||||
int huge DetectVGA256()
 | 
			
		||||
{
 | 
			
		||||
  int Vid;
 | 
			
		||||
 | 
			
		||||
  printf("Which video mode would you like to use? \n");
 | 
			
		||||
  printf("  0) 320x200x256\n");
 | 
			
		||||
  printf("  1) 640x400x256\n");
 | 
			
		||||
  printf("  2) 640x480x256\n");
 | 
			
		||||
  printf("  3) 800x600x256\n");
 | 
			
		||||
  printf("  4) 1024x768x256\n\n>");
 | 
			
		||||
  scanf("%d",&Vid);
 | 
			
		||||
  return Vid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int huge DetectVGA16()
 | 
			
		||||
{
 | 
			
		||||
  int Vid;
 | 
			
		||||
 | 
			
		||||
  printf("Which video mode would you like to use? \n");
 | 
			
		||||
  printf("  0) 320x200x16\n");
 | 
			
		||||
  printf("  1) 640x200x16\n");
 | 
			
		||||
  printf("  2) 640x350x16\n");
 | 
			
		||||
  printf("  3) 640x480x256\n");
 | 
			
		||||
  printf("  4) 800x600x16\n");
 | 
			
		||||
  printf("  5) 1024x768x16\n\n>");
 | 
			
		||||
  scanf("%d",&Vid);
 | 
			
		||||
  return Vid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int huge DetectTwk16()
 | 
			
		||||
{
 | 
			
		||||
  int Vid;
 | 
			
		||||
 | 
			
		||||
  printf("Which video mode would you like to use? \n");
 | 
			
		||||
  printf("  0) 704x528x16\n");
 | 
			
		||||
  printf("  1) 720x540x16\n");
 | 
			
		||||
  printf("  2) 736x552x16\n");
 | 
			
		||||
  printf("  3) 752x564x16\n");
 | 
			
		||||
  printf("  4) 768x576x16\n");
 | 
			
		||||
  printf("  5) 784x588x16\n");
 | 
			
		||||
  printf("  6) 800x600x16\n\n>");
 | 
			
		||||
  scanf("%d",&Vid);
 | 
			
		||||
  return Vid;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int huge DetectTwk256()
 | 
			
		||||
{
 | 
			
		||||
  int Vid;
 | 
			
		||||
 | 
			
		||||
  printf("Which video mode would you like to use? \n");
 | 
			
		||||
  printf("  0) 320x400x256\n");
 | 
			
		||||
  printf("  1) 320x480x256\n");
 | 
			
		||||
  printf("  2) 360x480x256\n");
 | 
			
		||||
  printf("  3) 376x564x256\n");
 | 
			
		||||
  printf("  4) 400x564x256\n");
 | 
			
		||||
  printf("  5) 400x600x256\n");
 | 
			
		||||
  scanf("%d",&Vid);
 | 
			
		||||
  return Vid;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
{
 | 
			
		||||
  int Gd = DETECT, Gm;
 | 
			
		||||
  int Drv;
 | 
			
		||||
 | 
			
		||||
  printf("Which driver would you like to use?\n");
 | 
			
		||||
  printf("  0) Svga256\n");
 | 
			
		||||
  printf("  1) Svga16\n");
 | 
			
		||||
  printf("  2) Tweak256\n");
 | 
			
		||||
  printf("  3) Tweak16\n");
 | 
			
		||||
  printf(">");
 | 
			
		||||
  scanf("%d",&Drv);
 | 
			
		||||
  switch(Drv)
 | 
			
		||||
  {
 | 
			
		||||
    case 0: installuserdriver("Svga256",DetectVGA256);
 | 
			
		||||
/*  If driver is linked with file, remove comments */
 | 
			
		||||
/*          registerfarbgidriver(Svga256_fdriver); */
 | 
			
		||||
	    break;
 | 
			
		||||
    case 1: installuserdriver("Svga16",DetectVGA16);
 | 
			
		||||
/*  If driver is linked with file, remove comments */
 | 
			
		||||
/*          registerfarbgidriver(Svga16_fdriver);  */
 | 
			
		||||
	    break;
 | 
			
		||||
    case 2: installuserdriver("Twk16",DetectTwk16);
 | 
			
		||||
/*  If driver is linked with file, remove comments */
 | 
			
		||||
/*          registerfarbgidriver(Twk16_fdriver);  */
 | 
			
		||||
	    break;
 | 
			
		||||
    case 3: installuserdriver("Twk256",DetectTwk256);
 | 
			
		||||
/*  If driver is linked with file, remove comments */
 | 
			
		||||
/*          registerfarbgidriver(Twk256_fdriver);  */
 | 
			
		||||
  }
 | 
			
		||||
  initgraph(&Gd,&Gm,"");
 | 
			
		||||
  setcolor(15);
 | 
			
		||||
  line(0,0,getmaxx(),getmaxy());
 | 
			
		||||
  line(0,getmaxy(),getmaxx(),0);
 | 
			
		||||
  getch();
 | 
			
		||||
  closegraph();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										103
									
								
								BGI/INITSVGA.PAS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								BGI/INITSVGA.PAS
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,103 @@
 | 
			
		||||
{ Sample program that initializes the SuperVGA driver}
 | 
			
		||||
Program Test256;
 | 
			
		||||
 | 
			
		||||
Uses Graph,Crt,Dos;
 | 
			
		||||
 | 
			
		||||
{$i svga16.inc}
 | 
			
		||||
{$i svga256.inc}
 | 
			
		||||
 | 
			
		||||
var
 | 
			
		||||
  GraphMode, GraphDriver : integer;
 | 
			
		||||
  Ky : Char;
 | 
			
		||||
  Drv : Integer;
 | 
			
		||||
 | 
			
		||||
{$F+}
 | 
			
		||||
function DetectVGA256 : Integer;
 | 
			
		||||
var Vid : Integer;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  Writeln('Which video mode would you like to use?');
 | 
			
		||||
  Writeln('  0) 320x200x256');
 | 
			
		||||
  Writeln('  1) 640x400x256');
 | 
			
		||||
  Writeln('  2) 640x480x256');
 | 
			
		||||
  Writeln('  3) 800x600x256');
 | 
			
		||||
  Writeln('  4) 1024x768x256');
 | 
			
		||||
  Write('> ');
 | 
			
		||||
  Readln(Vid);
 | 
			
		||||
  DetectVGA256 := Vid;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function DetectVGA16 : Integer;
 | 
			
		||||
var Vid : Integer;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  Writeln('Which video mode would you like to use? ');
 | 
			
		||||
  Writeln('  0) 320x200x16');
 | 
			
		||||
  Writeln('  1) 640x200x16');
 | 
			
		||||
  Writeln('  2) 640x350x16');
 | 
			
		||||
  Writeln('  3) 640x480x256');
 | 
			
		||||
  Writeln('  4) 800x600x16');
 | 
			
		||||
  Writeln('  5) 1024x768x16');
 | 
			
		||||
  Writeln('>');
 | 
			
		||||
  Readln(Vid);
 | 
			
		||||
  DetectVGA16 := Vid;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function DetectTwk256 : Integer;
 | 
			
		||||
var Vid : Integer;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  Writeln('Which video mode would you like to use?');
 | 
			
		||||
  Writeln('  0) 320x400x256');
 | 
			
		||||
  Writeln('  1) 320x480x256');
 | 
			
		||||
  Writeln('  2) 360x480x256');
 | 
			
		||||
  Writeln('  3) 376x564x256');
 | 
			
		||||
  Writeln('  4) 400x564x256');
 | 
			
		||||
  Writeln('  5) 400x600x256');
 | 
			
		||||
  Write('> ');
 | 
			
		||||
  Readln(Vid);
 | 
			
		||||
  DetectTwk256 := Vid;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function DetectTwk16 : Integer;
 | 
			
		||||
var Vid : Integer;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  Writeln('Which video mode would you like to use? ');
 | 
			
		||||
  Writeln('  0) 704x528x16');
 | 
			
		||||
  Writeln('  1) 720x540x16');
 | 
			
		||||
  Writeln('  2) 736x552x16');
 | 
			
		||||
  Writeln('  3) 752x564x256');
 | 
			
		||||
  Writeln('  4) 768x576x16');
 | 
			
		||||
  Writeln('  5) 784x588x16');
 | 
			
		||||
  Writeln('  6) 800x600x16');
 | 
			
		||||
  Writeln('>');
 | 
			
		||||
  Readln(Vid);
 | 
			
		||||
  DetectTwk16 := Vid;
 | 
			
		||||
end;
 | 
			
		||||
{$F-}
 | 
			
		||||
 
 | 
			
		||||
begin
 | 
			
		||||
  Writeln('Which driver would you like to use?');
 | 
			
		||||
  Writeln('  0) Svga256');
 | 
			
		||||
  Writeln('  1) Svga16');
 | 
			
		||||
  Writeln('  2) Tweak256');
 | 
			
		||||
  Writeln('  3) Tweak16');
 | 
			
		||||
  Write('>');
 | 
			
		||||
  Readln(Drv);
 | 
			
		||||
  if (Drv = 0) then
 | 
			
		||||
    GraphDriver := InstallUserDriver('SVGA256',@DetectVGA256)
 | 
			
		||||
  else if (Drv = 1)
 | 
			
		||||
    GraphDriver := InstallUserDriver('SVGA16',@DetectVGA16)
 | 
			
		||||
  else if (Drv = 2)
 | 
			
		||||
    GraphDriver := InstallUserDriver('Twk256',@DetectTwk256)
 | 
			
		||||
  else if (Drv = 3)
 | 
			
		||||
    GraphDriver := InstallUserDriver('Twk16',@DetectTwk16);
 | 
			
		||||
  GraphDriver := Detect;
 | 
			
		||||
  InitGraph(GraphDriver,GraphMode,'');
 | 
			
		||||
  setcolor(15);
 | 
			
		||||
  line(0,0,GetMaxX,GetMaxY);
 | 
			
		||||
  line(0,GetMaxY,GetMaxX,0);
 | 
			
		||||
  Ky := ReadKey;
 | 
			
		||||
  CloseGraph;
 | 
			
		||||
end.
 | 
			
		||||
							
								
								
									
										19
									
								
								BGI/MAKEFILE.SVG
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								BGI/MAKEFILE.SVG
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
## Makefile for initsvga.c (SuperVGA drivers)
 | 
			
		||||
## Demonstrates use of registerfarbgidriver
 | 
			
		||||
PROG 	= initsvga			# Program name to compile
 | 
			
		||||
CC 	= tcc				# Command-line compiler (tcc/bcc)
 | 
			
		||||
LIB 	= e:\lang\lib			# Library directory
 | 
			
		||||
INCLUDE = e:\lang\include		# Include directory
 | 
			
		||||
MODEL	= s				# Memory Model
 | 
			
		||||
 | 
			
		||||
$(PROG).exe: $(PROG).c svga256f.obj svga16f.obj
 | 
			
		||||
	$(CC) -L$(LIB) -I$(INCLUDE) -m$(MODEL) $(PROG).c \
 | 
			
		||||
	svga256f.obj svga16f.obj graphics.lib
 | 
			
		||||
 | 
			
		||||
svga256f.obj : svga256.bgi
 | 
			
		||||
	bgiobj /F svga256.bgi svga256f.obj _Svga256_fdriver SVGA256_TEXT
 | 
			
		||||
 | 
			
		||||
svga16f.obj : svga16.bgi
 | 
			
		||||
	bgiobj /F svga16.bgi svga16f.obj _Svga16_fdriver SVGA16_TEXT
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								BGI/MAKEFILE.TWK
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								BGI/MAKEFILE.TWK
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
## Makefile for initsvga.c (Tweaked drivers)
 | 
			
		||||
## Demonstrates use of registerfarbgidriver
 | 
			
		||||
PROG 	= initsvga			# Program name to compile
 | 
			
		||||
CC 	= tcc				# Command-line compiler (tcc/bcc)
 | 
			
		||||
LIB 	= e:\lang\lib			# Library directory
 | 
			
		||||
INCLUDE = e:\lang\include		# Include directory
 | 
			
		||||
MODEL	= s				# Memory Model
 | 
			
		||||
 | 
			
		||||
$(PROG).exe: $(PROG).c twk256f.obj twk16f.obj
 | 
			
		||||
	$(CC) -L$(LIB) -I$(INCLUDE) -m$(MODEL) $(PROG).c \
 | 
			
		||||
	twk256f.obj twk16f.obj graphics.lib
 | 
			
		||||
 | 
			
		||||
twk256f.obj : twk256.bgi
 | 
			
		||||
	bgiobj /F twk256.bgi twk256f.obj _twk256_fdriver TWK256_TEXT
 | 
			
		||||
 | 
			
		||||
twk16f.obj : twk16.bgi
 | 
			
		||||
	bgiobj /F twk16.bgi twk16f.obj _twk16_fdriver TWK16_TEXT
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								BGI/NOTES16.SVG
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								BGI/NOTES16.SVG
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
SuperVGA 16 BGI driver
 | 
			
		||||
Version 1.11
 | 
			
		||||
August 20, 1991
 | 
			
		||||
 | 
			
		||||
This is the latest version of my 16 color BGI driver.  All functions have
 | 
			
		||||
been implemented (including paging and floodfill), and should work like
 | 
			
		||||
the EGAVGA driver.
 | 
			
		||||
 | 
			
		||||
	o Fixed getimage bug
 | 
			
		||||
 | 
			
		||||
	o Added new logical operations to putimage:
 | 
			
		||||
	  XNOR_PUT
 | 
			
		||||
	  NAND_PUT
 | 
			
		||||
	  NOR_PUT
 | 
			
		||||
							
								
								
									
										12
									
								
								BGI/NOTES16.TWK
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								BGI/NOTES16.TWK
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
TweakVGA 16 BGI driver
 | 
			
		||||
Version 1.0
 | 
			
		||||
August 20, 1991
 | 
			
		||||
 | 
			
		||||
This is the first version of my 16 color tweaked BGI driver.  All functions 
 | 
			
		||||
have been implemented (including floodfill), and should work like
 | 
			
		||||
the EGAVGA driver.
 | 
			
		||||
 | 
			
		||||
NOTES:
 | 
			
		||||
 Paging and mouse cursor will not work
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								BGI/NOTES256.SVG
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								BGI/NOTES256.SVG
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
SuperVGA 256 BGI driver 
 | 
			
		||||
Version 2.21
 | 
			
		||||
August 20, 1991
 | 
			
		||||
 | 
			
		||||
This is the newest version of my SuperVGA 256 BGI driver.  I have fixed 
 | 
			
		||||
several bugs in the previous releases, as well as added several improvements.
 | 
			
		||||
 | 
			
		||||
	o 1024x768x256 color mode is now supported on Tseng 4000,
 | 
			
		||||
	  Chips&Tech, Trident 8900 and Ahead video cards.
 | 
			
		||||
 | 
			
		||||
	o Getimage and putimage will work with bitmaps up to the 
 | 
			
		||||
	 size of available memory. (> 64k)
 | 
			
		||||
 | 
			
		||||
	o VESA support has been added.
 | 
			
		||||
 | 
			
		||||
	o Added setvgapalette256 function.
 | 
			
		||||
 | 
			
		||||
	o Floodfill is implemented.
 | 
			
		||||
 | 
			
		||||
	o Added new logical operations to putimage
 | 
			
		||||
	  XNOR_PUT
 | 
			
		||||
	  NAND_PUT
 | 
			
		||||
	  NOR_PUT
 | 
			
		||||
	  TRANS_COPY_PUT - Treats 0 as transparent
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								BGI/NOTES256.TWK
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								BGI/NOTES256.TWK
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
TweakVGA 256 BGI driver
 | 
			
		||||
Version 0.5
 | 
			
		||||
August 20, 1991
 | 
			
		||||
 | 
			
		||||
This is the first version of my 256 color tweaked BGI driver.  All functions 
 | 
			
		||||
have been implemented (except getimage/putimage, but these will be added soon).
 | 
			
		||||
 | 
			
		||||
NOTES:
 | 
			
		||||
 Paging and mouse cursor will not work
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										181
									
								
								BGI/OCTREE.C
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								BGI/OCTREE.C
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,181 @@
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "alloc.h"
 | 
			
		||||
#include "dos.h"
 | 
			
		||||
#include "quant.h"
 | 
			
		||||
#include "octree.h"
 | 
			
		||||
 | 
			
		||||
#define TESTBIT(a,i) ( ((a) >> (i)) & 1)
 | 
			
		||||
#define MAXDEPTH 8
 | 
			
		||||
#define BYTE    unsigned char
 | 
			
		||||
 | 
			
		||||
UCHAR palette [MAXCOLORS][3];
 | 
			
		||||
 | 
			
		||||
static UINT size;
 | 
			
		||||
static UINT reducelevel;
 | 
			
		||||
static UINT leaflevel;
 | 
			
		||||
static OCTREE tree;
 | 
			
		||||
static BYTE rgb_mio[3];
 | 
			
		||||
static OCTREE reducelist[MAXDEPTH + 1];
 | 
			
		||||
 | 
			
		||||
static unsigned char quant_r,
 | 
			
		||||
                     quant_g,
 | 
			
		||||
                     quant_b;
 | 
			
		||||
 | 
			
		||||
    /* Quantiza seg<65>n TESTBIT, pero solamente de retorno */
 | 
			
		||||
 | 
			
		||||
static char quant2(OCTREE tree)
 | 
			
		||||
{
 | 
			
		||||
	if (tree->leaf)   return(tree->colorindex);
 | 
			
		||||
	else					return(quant2(tree->next[
 | 
			
		||||
								TESTBIT(quant_r, MAXDEPTH - tree->level) * 4 +
 | 
			
		||||
								TESTBIT(quant_g, MAXDEPTH - tree->level) * 2 +
 | 
			
		||||
								TESTBIT(quant_b, MAXDEPTH - tree->level)]));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    /* devuelve el indice a la paleta quantizada de acuerdo con RGB apuntado */
 | 
			
		||||
 | 
			
		||||
int pal_index(UCHAR *p)
 | 
			
		||||
{
 | 
			
		||||
	quant_r = p[RED];
 | 
			
		||||
	quant_g = p[GREEN];
 | 
			
		||||
	quant_b = p[BLUE];
 | 
			
		||||
	return quant2(tree);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static double init_Cfactor;
 | 
			
		||||
static UINT init_col_num;
 | 
			
		||||
 | 
			
		||||
static void initpalette(OCTREE tree)
 | 
			
		||||
{
 | 
			
		||||
	UINT j;
 | 
			
		||||
 | 
			
		||||
	if (tree == NULL) return;
 | 
			
		||||
	if (tree->leaf || tree->level == leaflevel) {
 | 
			
		||||
        palette[init_col_num][RED]   = (char) ((init_Cfactor * tree->rgbsum.r) / tree->colorcount + .5);
 | 
			
		||||
        palette[init_col_num][GREEN] = (char) ((init_Cfactor * tree->rgbsum.g) / tree->colorcount + .5);
 | 
			
		||||
        palette[init_col_num][BLUE]  = (char) ((init_Cfactor * tree->rgbsum.b) / tree->colorcount + .5);
 | 
			
		||||
		tree->colorindex = init_col_num;
 | 
			
		||||
		tree->leaf = TRUE;
 | 
			
		||||
		init_col_num++;
 | 
			
		||||
	} else {
 | 
			
		||||
		for (j = 0; j < 8; j++)
 | 
			
		||||
			initpalette(tree->next[j]);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    /* calcula la paleta de acuerdo con un factor introducido */
 | 
			
		||||
 | 
			
		||||
UINT calc_palette(UINT i, double Cfactor)
 | 
			
		||||
{
 | 
			
		||||
	init_Cfactor = Cfactor;
 | 
			
		||||
	init_col_num = i;
 | 
			
		||||
	initpalette(tree);
 | 
			
		||||
	return init_col_num;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void newandinit(OCTREE *tree, UINT depth)
 | 
			
		||||
    {
 | 
			
		||||
    unsigned long rest;
 | 
			
		||||
	*tree = (OCTREE)calloc(1,sizeof(struct node));
 | 
			
		||||
	if (*tree == NULL) {
 | 
			
		||||
	rest=coreleft();
 | 
			
		||||
	printf("No hay bastante Memoria");
 | 
			
		||||
        exit(1);
 | 
			
		||||
        }
 | 
			
		||||
    (*tree)->level = depth;
 | 
			
		||||
    (*tree)->leaf = (depth >= leaflevel);
 | 
			
		||||
    if ((*tree)->leaf)
 | 
			
		||||
        size++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
static void getreduceable(OCTREE *node)
 | 
			
		||||
    {
 | 
			
		||||
    UINT newreducelevel;
 | 
			
		||||
 | 
			
		||||
    newreducelevel = reducelevel;
 | 
			
		||||
    while (reducelist[newreducelevel] == NULL)
 | 
			
		||||
        newreducelevel--;
 | 
			
		||||
    *node = reducelist[newreducelevel];
 | 
			
		||||
    reducelist[newreducelevel] =
 | 
			
		||||
                reducelist[newreducelevel]->nextreduceable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
static void makereduceable(UINT level,OCTREE node)
 | 
			
		||||
{
 | 
			
		||||
	node->nextreduceable = reducelist[level];
 | 
			
		||||
	reducelist[level] = node;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    /* reduzcamos el arbol, pues K+1>size */
 | 
			
		||||
 | 
			
		||||
static void reducetree(void)
 | 
			
		||||
{
 | 
			
		||||
	OCTREE node;
 | 
			
		||||
	UINT depth;
 | 
			
		||||
 | 
			
		||||
	getreduceable(&node);
 | 
			
		||||
	node->leaf = 1;
 | 
			
		||||
	size = size - node->children + 1;
 | 
			
		||||
	depth = node->level;
 | 
			
		||||
	if (depth < reducelevel) {
 | 
			
		||||
		reducelevel = depth;
 | 
			
		||||
		leaflevel = reducelevel + 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static UCHAR insert_rgb[3];
 | 
			
		||||
 | 
			
		||||
    /* para insertar cada color dentro del arbol */
 | 
			
		||||
 | 
			
		||||
static void inserttree(OCTREE *tree, UINT depth)
 | 
			
		||||
{
 | 
			
		||||
	UINT branch;
 | 
			
		||||
 | 
			
		||||
	if (*tree == NULL)
 | 
			
		||||
		newandinit(tree,depth);
 | 
			
		||||
	(*tree)->colorcount++;
 | 
			
		||||
	(*tree)->rgbsum.r += insert_rgb[RED];
 | 
			
		||||
	(*tree)->rgbsum.g += insert_rgb[GREEN];
 | 
			
		||||
	(*tree)->rgbsum.b += insert_rgb[BLUE];
 | 
			
		||||
	if ((*tree)->leaf == FALSE && depth < leaflevel) {
 | 
			
		||||
		branch = TESTBIT(insert_rgb[RED],MAXDEPTH - depth) * 4 +
 | 
			
		||||
					TESTBIT(insert_rgb[GREEN],MAXDEPTH - depth) * 2 +
 | 
			
		||||
					TESTBIT(insert_rgb[BLUE],MAXDEPTH - depth);
 | 
			
		||||
		if ((*tree)->next[branch] == NULL) {
 | 
			
		||||
			(*tree)->children++;
 | 
			
		||||
			if ((*tree)->children == 2)
 | 
			
		||||
				makereduceable(depth,*tree);
 | 
			
		||||
		}
 | 
			
		||||
		inserttree(&((*tree)->next[branch]), depth + 1);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void lee(FILE *uno,double gamm)     /* funci<63>n que leer<65> la 1<> vez el TGA */
 | 
			
		||||
{
 | 
			
		||||
	union REGS regset;
 | 
			
		||||
	struct SREGS sregset;
 | 
			
		||||
 | 
			
		||||
	reducelevel = MAXDEPTH;
 | 
			
		||||
	leaflevel = reducelevel + 1;
 | 
			
		||||
 | 
			
		||||
	while (!feof(uno)) {
 | 
			
		||||
	fread(&rgb_mio,3,1,uno);
 | 
			
		||||
	insert_rgb[0]=rgb_mio[2];	// CUIDADO, valores de TGA tipo 2
 | 
			
		||||
	insert_rgb[1]=rgb_mio[1];	// Estan BGR no RGB
 | 
			
		||||
	insert_rgb[2]=rgb_mio[0];
 | 
			
		||||
		inserttree(&tree, 0);
 | 
			
		||||
	if (size > MAXCOLORS - 1)       /* > K+1? (colores) */
 | 
			
		||||
			reducetree();
 | 
			
		||||
	}
 | 
			
		||||
	calc_palette((unsigned int)0,gamm);
 | 
			
		||||
	regset.x.ax=0x1012;
 | 
			
		||||
	regset.x.bx=0;
 | 
			
		||||
	regset.x.cx=256;
 | 
			
		||||
	regset.x.dx=FP_OFF(palette);
 | 
			
		||||
	sregset.es=FP_SEG(palette);
 | 
			
		||||
    int86x(0x10,®set,®set,&sregset);  /* interrupci<63>n que carga y */
 | 
			
		||||
			/* activa la paleta nueva */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										19
									
								
								BGI/OCTREE.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								BGI/OCTREE.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
struct colorsum {
 | 
			
		||||
	unsigned long r, g, b;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct node * OCTREE;
 | 
			
		||||
struct node {
 | 
			
		||||
	unsigned char leaf;
 | 
			
		||||
	unsigned char level;
 | 
			
		||||
	unsigned char colorindex;
 | 
			
		||||
	unsigned char children;
 | 
			
		||||
	unsigned long colorcount;
 | 
			
		||||
	struct colorsum rgbsum;
 | 
			
		||||
	OCTREE nextreduceable;
 | 
			
		||||
	OCTREE next[8];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern OCTREE	tree;
 | 
			
		||||
 | 
			
		||||
UINT calc_palette(UINT i, double Cfactor);
 | 
			
		||||
							
								
								
									
										146
									
								
								BGI/QUA.C
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								BGI/QUA.C
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,146 @@
 | 
			
		||||
/*  Ejemplo de displayado de TGA tipo 2 en SVGA 640*480*256
 | 
			
		||||
    Autor:  Juan Ramon Lehmann
 | 
			
		||||
            14-09-1994 (c)
 | 
			
		||||
    No olvidar compilar en modo large
 | 
			
		||||
     y a<>adir libreria de graficos */
 | 
			
		||||
 | 
			
		||||
#include "graphics.h"
 | 
			
		||||
#include "stdlib.h"
 | 
			
		||||
#include "alloc.h"
 | 
			
		||||
#include "math.h"
 | 
			
		||||
#include "dos.h"
 | 
			
		||||
#include "conio.h"
 | 
			
		||||
#include "stdio.h"
 | 
			
		||||
#include "string.h"
 | 
			
		||||
#include "search.h"
 | 
			
		||||
#include "math.h"
 | 
			
		||||
 | 
			
		||||
typedef unsigned char	BYTE;
 | 
			
		||||
typedef unsigned int	WORD;
 | 
			
		||||
 | 
			
		||||
void InitGrafico(void);
 | 
			
		||||
int huge DetectSVGA(void);
 | 
			
		||||
 | 
			
		||||
struct Triplete {
 | 
			
		||||
	BYTE Red;
 | 
			
		||||
	BYTE Green;
 | 
			
		||||
	BYTE Blue;
 | 
			
		||||
	} *MiTriplete;
 | 
			
		||||
 | 
			
		||||
struct {
 | 
			
		||||
	  BYTE bIDFieldSize;
 | 
			
		||||
	  BYTE bColorMapType;
 | 
			
		||||
	  BYTE bImageType;
 | 
			
		||||
	  BYTE ClrMapSpec[5];
 | 
			
		||||
	  WORD wXOrigin;
 | 
			
		||||
	  WORD wYOrigin;
 | 
			
		||||
	  WORD wWidth;
 | 
			
		||||
	  WORD wHeight;
 | 
			
		||||
	  BYTE bBitsPerPixel;
 | 
			
		||||
	  BYTE bImageDesc;
 | 
			
		||||
				 } stTarga24Header = {
 | 
			
		||||
				  0,0,2,
 | 
			
		||||
				  0,0,0,0,0,
 | 
			
		||||
				  0,0,0,0,
 | 
			
		||||
				  24,
 | 
			
		||||
				  0
 | 
			
		||||
			   };
 | 
			
		||||
 | 
			
		||||
int pal_index(unsigned char *p);
 | 
			
		||||
void lee(FILE *uno,double gam);     /* funci<63>n que leer<65> la 1<> vez el TGA */
 | 
			
		||||
 | 
			
		||||
	// Para las llamadas a las interrupciones
 | 
			
		||||
	union REGS regset;
 | 
			
		||||
	struct SREGS sregset;
 | 
			
		||||
	FILE *in;
 | 
			
		||||
 | 
			
		||||
int main(int argv,char *argc[])
 | 
			
		||||
{
 | 
			
		||||
	register n;
 | 
			
		||||
	static BYTE RGBLineBuffer[1024*3];
 | 
			
		||||
	int wLineCount,i,x,y;
 | 
			
		||||
	static double gamma;
 | 
			
		||||
	static BYTE pixel;
 | 
			
		||||
	char *name,*endptr;
 | 
			
		||||
	WORD wHeight,wWidth;
 | 
			
		||||
 | 
			
		||||
	if (argv<2)
 | 
			
		||||
		{
 | 
			
		||||
	printf("Error, la sintaxis es demo.exe <filename> <gamma factor>\n");
 | 
			
		||||
	printf("filename= TGA tipo 2\n");
 | 
			
		||||
        printf("gamma factor= Factor de correcci<63>n, se aconseja 0.2\n\n\n");
 | 
			
		||||
		exit(0);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	name=argc[1];	// nombre del fichero
 | 
			
		||||
	gamma=strtod(argc[2],&endptr);
 | 
			
		||||
 | 
			
		||||
	InitGrafico();
 | 
			
		||||
 | 
			
		||||
	if ((in=fopen(name,"rb"))==NULL)
 | 
			
		||||
	  {
 | 
			
		||||
	  perror("Error al abrir el fichero TGA");
 | 
			
		||||
	  exit(0);
 | 
			
		||||
	  }
 | 
			
		||||
 | 
			
		||||
	fread(&stTarga24Header, sizeof(stTarga24Header),1, in); // leo cabecera
 | 
			
		||||
	lee(in,gamma);	/* Lee TGA la primera vez */
 | 
			
		||||
 | 
			
		||||
		// aqui ya est<73> la quantizaci<63>n
 | 
			
		||||
 | 
			
		||||
	fseek(in, 0L, SEEK_SET);	// dejo el fichero al principio
 | 
			
		||||
	fread(&stTarga24Header, sizeof(stTarga24Header),1, in); // leo cabecera
 | 
			
		||||
 | 
			
		||||
		wHeight=stTarga24Header.wHeight;
 | 
			
		||||
		wWidth=stTarga24Header.wWidth;	// longitud grafico
 | 
			
		||||
 | 
			
		||||
		y=320;
 | 
			
		||||
		x=0;
 | 
			
		||||
 | 
			
		||||
	   for(wLineCount=0;wLineCount<=wHeight-1;wLineCount++)
 | 
			
		||||
	  {
 | 
			
		||||
		 fread(&RGBLineBuffer,wWidth*3,1,in);	//wWidth*3 ---> 320
 | 
			
		||||
 | 
			
		||||
		  i=0;
 | 
			
		||||
		 while (i<=wWidth*3)
 | 
			
		||||
		 {
 | 
			
		||||
			/* como los valores est<73>n a la inversa....:-) */
 | 
			
		||||
 | 
			
		||||
		 MiTriplete->Blue=RGBLineBuffer[i++];
 | 
			
		||||
		 MiTriplete->Green=RGBLineBuffer[i++];
 | 
			
		||||
		 MiTriplete->Red=RGBLineBuffer[i++];
 | 
			
		||||
 | 
			
		||||
		  pixel=pal_index(MiTriplete);
 | 
			
		||||
		  putpixel(x++,y,pixel);
 | 
			
		||||
		  }
 | 
			
		||||
		  x=0;
 | 
			
		||||
		  y--;
 | 
			
		||||
	  }
 | 
			
		||||
	getch();
 | 
			
		||||
	closegraph();	/* desactiva modo grafico */
 | 
			
		||||
	fclose(in);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void InitGrafico(void)
 | 
			
		||||
	{
 | 
			
		||||
	int gdriver = DETECT, gmode=0, errorcode;
 | 
			
		||||
	installuserdriver("Svga256",DetectSVGA);
 | 
			
		||||
	initgraph(&gdriver,&gmode, "");
 | 
			
		||||
	errorcode = graphresult();
 | 
			
		||||
	if (errorcode != grOk)
 | 
			
		||||
	{
 | 
			
		||||
       printf("Error de gr<67>ficos: %s\n", grapherrormsg(errorcode));
 | 
			
		||||
       printf("Pulse una tecla para salir:");
 | 
			
		||||
	   getch();
 | 
			
		||||
	   exit(1);
 | 
			
		||||
	}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
int huge DetectSVGA(void)
 | 
			
		||||
	{
 | 
			
		||||
		return(2);	 /* 2=SVGA 640*480*256 0=320*200*256*/
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								BGI/QUANT.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								BGI/QUANT.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <alloc.h>
 | 
			
		||||
 | 
			
		||||
#define TRUE		1
 | 
			
		||||
#define FALSE		0
 | 
			
		||||
 | 
			
		||||
#define RED             0
 | 
			
		||||
#define GREEN		1
 | 
			
		||||
#define BLUE            2
 | 
			
		||||
 | 
			
		||||
#define MAXCOLORS               255
 | 
			
		||||
 | 
			
		||||
typedef unsigned char UCHAR;                    /* 8 bits */
 | 
			
		||||
typedef unsigned short int UINT;                /* 16 bits */
 | 
			
		||||
typedef unsigned long int ULONG;                /* 32 bits */
 | 
			
		||||
 | 
			
		||||
extern UCHAR palette[MAXCOLORS][3];
 | 
			
		||||
int pal_index(UCHAR *pixel);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										135
									
								
								BGI/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								BGI/README
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,135 @@
 | 
			
		||||
**************************************************************
 | 
			
		||||
COPYRIGHT 1991, JORDAN HARGRAPHIX SOFTWARE
 | 
			
		||||
PORTIONS COPYRIGHT JOHN BRIDGES, 1990
 | 
			
		||||
		   CHRISTOPHER MORGAN, 1984
 | 
			
		||||
**************************************************************
 | 
			
		||||
 | 
			
		||||
Here it is! The SuperVGA/Tweak BGI drivers you have all been waiting for! ;->
 | 
			
		||||
 | 
			
		||||
  These drivers support a wide range of VGA cards, and should work on
 | 
			
		||||
all major brands.
 | 
			
		||||
 | 
			
		||||
Card types supported: (SuperVGA drivers)
 | 
			
		||||
  Ahead, ATI, Chips & Tech, Everex, Genoa, Paradise, Trident (both 8800 
 | 
			
		||||
and 8900), Tseng (both 3000 and 4000 chipsets) and Video7.
 | 
			
		||||
  These drivers will also work on video cards with VESA capability.
 | 
			
		||||
  The tweaked drivers will work on any register-compatible VGA card.
 | 
			
		||||
 | 
			
		||||
I have not tested these drivers on all these card types, so I can not guarantee
 | 
			
		||||
perfect operation with your card.  I have tested them extensively
 | 
			
		||||
on Trident, Tseng and ATI cards, and have had no problems. (Trident 8800
 | 
			
		||||
cards occasionally have problems, especially older models)
 | 
			
		||||
 | 
			
		||||
Modes currently supported:
 | 
			
		||||
  SuperVGA 16-color
 | 
			
		||||
   0) Standard EGA/VGA 320x200x16
 | 
			
		||||
   1) Standard EGA/VGA 640x200x16
 | 
			
		||||
   2) Standard EGA/VGA 640x350x16
 | 
			
		||||
   3) Standard VGA 640x480x16
 | 
			
		||||
   4) SuperVGA/VESA 800x600x16
 | 
			
		||||
   5) SuperVGA/VESA 1024x768x16
 | 
			
		||||
 | 
			
		||||
  SuperVGA 256-color
 | 
			
		||||
   0) Standard VGA/MCGA 320x200x256
 | 
			
		||||
   1) 256k Svga/VESA 640x400x256
 | 
			
		||||
   2) 512k Svga/VESA 640x480x256
 | 
			
		||||
   3) 512k Svga/VESA 800x600x256
 | 
			
		||||
   4) 1024k Svga/VESA 1024x768x256
 | 
			
		||||
 | 
			
		||||
  Tweaked 16-color
 | 
			
		||||
   0) 704x528x16
 | 
			
		||||
   1) 720x540x16
 | 
			
		||||
   2) 736x552x16
 | 
			
		||||
   3) 752x564x16
 | 
			
		||||
   4) 768x576x16
 | 
			
		||||
   5) 784x588x16
 | 
			
		||||
   6) 800x600x16
 | 
			
		||||
 | 
			
		||||
  Tweaked 256-color
 | 
			
		||||
   0) 320x400x256
 | 
			
		||||
   1) 320x480x256
 | 
			
		||||
   2) 360x480x256
 | 
			
		||||
   3) 376x564x256
 | 
			
		||||
   4) 400x564x256
 | 
			
		||||
   5) 400x600x256
 | 
			
		||||
 | 
			
		||||
----------------------------------------------------------------------------
 | 
			
		||||
INSTALLATION:
 | 
			
		||||
  Using the driver in existing programs is easy. (If you have the source)
 | 
			
		||||
 | 
			
		||||
  Check the files INITSVGA.C and INITSVGA.PAS for examples of installation
 | 
			
		||||
into C and Pascal programs.
 | 
			
		||||
 | 
			
		||||
----------------------------------------------------------------------------
 | 
			
		||||
NOTE: 
 | 
			
		||||
 | 
			
		||||
 - The mouse cursor may not work in all modes of my driver.  This is because
 | 
			
		||||
   most mouse drivers do not support SuperVGA/Tweak modes.
 | 
			
		||||
 | 
			
		||||
 - The registerbgidriver(*) function does not work. This is due to a limitation
 | 
			
		||||
   in the BGI kernel, which checks the linked in driver with a list of the
 | 
			
		||||
   standard BGI drivers (CGA,EGAVGA,etc..), and if it is not one of those,
 | 
			
		||||
   will not use the linked in driver.
 | 
			
		||||
 | 
			
		||||
 * However, registerfarbgidriver DOES work properly with C/C++... (8/1/91)
 | 
			
		||||
   Check INITSVGA.C and the makefile for examples of how to use.
 | 
			
		||||
 | 
			
		||||
 - Imagesize does not work. (the kernel does not call the driver to do this)
 | 
			
		||||
   Use the following formula:
 | 
			
		||||
    * imsize = ((xwid >> 1)+1)*ywid+4; 	(16-color)
 | 
			
		||||
    * imsize = xwid*ywid+4; 		(256-color)
 | 
			
		||||
 | 
			
		||||
----------------------------------------------------------------------------
 | 
			
		||||
WARNING: The drivers do not test to see if the card installed is
 | 
			
		||||
actually a VGA card (If the Svga drivers do not detect a SuperVGA card, they 
 | 
			
		||||
treat the card as a standard VGA), so DO NOT use the drivers if you do not 
 | 
			
		||||
have a VGA card installed.
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------
 | 
			
		||||
REGISTRATION:
 | 
			
		||||
  I have decided to release these drivers free of charge,
 | 
			
		||||
although donations would be greatly appreciated and certainly
 | 
			
		||||
expedite the release of future versions. :->
 | 
			
		||||
  The drivers have not been crippled in any way, though beta releases of new
 | 
			
		||||
drivers may have some functions yet unimplemented.  
 | 
			
		||||
 | 
			
		||||
Registration fees:
 | 
			
		||||
 | 
			
		||||
	SuperVGA 256 			$20
 | 
			
		||||
	SuperVGA 16			$20
 | 
			
		||||
	Tweak 16			$20
 | 
			
		||||
	Tweak 256			$20
 | 
			
		||||
 | 
			
		||||
	Any two:			$30
 | 
			
		||||
	All 4:				$50
 | 
			
		||||
 | 
			
		||||
With donations of $20 and up, you will be considered a registered user.
 | 
			
		||||
Registered users get the full source code and upgrades on future releases.
 | 
			
		||||
 | 
			
		||||
From September 1-May 8, please send checks/money to:
 | 
			
		||||
	Jordan Hargrave
 | 
			
		||||
	1000 Morewood Ave, Box #3277
 | 
			
		||||
	Pittsburgh, PA 15213
 | 
			
		||||
	(412) 268-4493
 | 
			
		||||
 | 
			
		||||
From May 8-September 1, send to:
 | 
			
		||||
	Jordan Hargrave
 | 
			
		||||
	1615 Burnley Road
 | 
			
		||||
	Charlotte, NC 28210
 | 
			
		||||
	(704) 553-2332
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
I have started working on a new graphics library that will support resolutions
 | 
			
		||||
from 160x200 (Ick! ;->) all the way up to 1280x1024, and from 1-bit color
 | 
			
		||||
to 24-bit color.  It will support a wide range of cards and I need testers
 | 
			
		||||
for XGA/8514/Hercules Graphics Station cards.
 | 
			
		||||
 | 
			
		||||
*===============================*===========================================*
 | 
			
		||||
| Jordan Powell Hargrave	|   Internet:	jh5y@andrew.cmu.edu	    |
 | 
			
		||||
| 1000 Morewood Ave, Box #3277  |     Bitnet:	jh5y%andrew.cmu.edu@cmccvb  |
 | 
			
		||||
| Pittsburgh, PA 15213		|       UUCP:	uunet!andrew.cmu.edu!jh5y   |
 | 
			
		||||
| (412) 268-4493	 	|    Prodigy:	HXNJ79A			    |
 | 
			
		||||
|			  	| Compuserve:	[72510,1143]		    |
 | 
			
		||||
*===============================*===========================================*
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										58
									
								
								BGI/REGISTER.DOC
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								BGI/REGISTER.DOC
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
Registration Form
 | 
			
		||||
 | 
			
		||||
EMAIL ADDRESS:___________________________________________
 | 
			
		||||
 | 
			
		||||
NAME:____________________________________________________
 | 
			
		||||
ADDRESS:_________________________________________________
 | 
			
		||||
	_________________________________________________
 | 
			
		||||
	_________________________________________________
 | 
			
		||||
CITY:________________________ STATE:____ ZIP:____________
 | 
			
		||||
COUNTRY:____________
 | 
			
		||||
 | 
			
		||||
PHONE # (Data):  ___ ____ ______________
 | 
			
		||||
	(Voice): ___ ____ ______________
 | 
			
		||||
 | 
			
		||||
General info:
 | 
			
		||||
 | 
			
		||||
Machine type:  8088/6[_]  80286[_]  80386[_]  80486[_]  Other[_] 
 | 
			
		||||
Machine name: ________________________________________
 | 
			
		||||
 | 
			
		||||
Display type:  MDA[_]  CGA[_]  Herc[_]  EGA[_]  MCGA[_]  VGA[_]  SVGA[_]
 | 
			
		||||
Card name:_____________________________________________
 | 
			
		||||
 | 
			
		||||
Floppy drives:    3<> 720k[_]  3<> 1.44M[_]  3<> 2.88M[_]
 | 
			
		||||
		  5<> 360k[_]  5<> 1.2M [_]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Modem speed: 1200[_]  2400[_]  4800[_]  9600[_] 19200[_] Other: ________
 | 
			
		||||
Modem name:_____________________________
 | 
			
		||||
 | 
			
		||||
Other configuration:_________________________________________________
 | 
			
		||||
		    _________________________________________________
 | 
			
		||||
		    _________________________________________________
 | 
			
		||||
		    _________________________________________________
 | 
			
		||||
		    _________________________________________________
 | 
			
		||||
 | 
			
		||||
Driver type:	Svga 256     ____	@ $20
 | 
			
		||||
		Svga 16      ____	@ $20
 | 
			
		||||
		Tweak 256    ____	@ $20
 | 
			
		||||
		Tweak 16     ____	@ $30
 | 
			
		||||
 | 
			
		||||
		Two drivers  ____	@ $30 (check above)
 | 
			
		||||
		Four drivers ____	@ $50
 | 
			
		||||
 | 
			
		||||
Do you want a copy of the source? _____
 | 
			
		||||
 | 
			
		||||
From September 1-May 8, please send checks/money to:
 | 
			
		||||
	Jordan Hargrave
 | 
			
		||||
	1000 Morewood Ave, Box #3277
 | 
			
		||||
	Pittsburgh, PA 15213
 | 
			
		||||
	(412) 268-4493
 | 
			
		||||
 | 
			
		||||
From May 8-September 1, send to:
 | 
			
		||||
	Jordan Hargrave
 | 
			
		||||
	1615 Burnley Road
 | 
			
		||||
	Charlotte, NC 28210
 | 
			
		||||
	(704) 553-2332
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								BGI/SVGA16.BGI
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								BGI/SVGA16.BGI
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										48
									
								
								BGI/SVGA16.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								BGI/SVGA16.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
/************************************************/
 | 
			
		||||
/* 						*/
 | 
			
		||||
/*        SuperVGA 16 BGI driver defines	*/
 | 
			
		||||
/*		Copyright (c) 1991		*/
 | 
			
		||||
/*	    Jordan Hargraphix Software		*/
 | 
			
		||||
/*						*/
 | 
			
		||||
/************************************************/
 | 
			
		||||
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
 | 
			
		||||
typedef unsigned char DacPalette16[16][3];
 | 
			
		||||
 | 
			
		||||
extern int far Svga16_fdriver[];
 | 
			
		||||
 | 
			
		||||
/* These are the currently supported modes */
 | 
			
		||||
#define SVGA320x200x16	0	/* 320x200x16 Standard EGA/VGA */
 | 
			
		||||
#define SVGA640x200x16	1	/* 640x200x16 Standard EGA/VGA */
 | 
			
		||||
#define SVGA640x350x16	2	/* 640x350x16 Standard EGA/VGA */
 | 
			
		||||
#define SVGA640x480x16	3	/* 640x480x16 Standard VGA */
 | 
			
		||||
#define SVGA800x600x16	4	/* 800x600x16 SuperVGA/VESA */
 | 
			
		||||
#define SVGA1024x768x16	5	/* 1024x768x16 SuperVGA/VESA */
 | 
			
		||||
 | 
			
		||||
#ifndef XNOR_PUT
 | 
			
		||||
#define	XNOR_PUT	5
 | 
			
		||||
#define NAND_PUT	6
 | 
			
		||||
#define NOR_PUT		7
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Setvgapalette16 sets the entire 16 color palette */
 | 
			
		||||
/* PalBuf contains RGB values for all 16 colors     */
 | 
			
		||||
/* R,G,B values range from 0 to 63	            */
 | 
			
		||||
/* Usage: 					    */ 
 | 
			
		||||
/*  DacPalette16 dac16;                             */
 | 
			
		||||
/*						    */
 | 
			
		||||
/*  setvgapalette(&dac16);			    */
 | 
			
		||||
void setvgapalette16(DacPalette16 *PalBuf)
 | 
			
		||||
{
 | 
			
		||||
  struct REGPACK reg;
 | 
			
		||||
 | 
			
		||||
  reg.r_ax = 0x1012;
 | 
			
		||||
  reg.r_bx = 0;
 | 
			
		||||
  reg.r_cx = 16;
 | 
			
		||||
  reg.r_es = FP_SEG(PalBuf);
 | 
			
		||||
  reg.r_dx = FP_OFF(PalBuf);
 | 
			
		||||
  intr(0x10,®);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										42
									
								
								BGI/SVGA16.INC
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								BGI/SVGA16.INC
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
(************************************************)
 | 
			
		||||
(* 						*)
 | 
			
		||||
(*	  SuperVGA 16 BGI driver defines	*)
 | 
			
		||||
(*		Copyright (c) 1991		*)
 | 
			
		||||
(*	    Jordan Hargraphix Software		*)
 | 
			
		||||
(*						*)
 | 
			
		||||
(************************************************)
 | 
			
		||||
 | 
			
		||||
type DacPalette16 = array[0..15] of array[0..2] of Byte;
 | 
			
		||||
 | 
			
		||||
(* These are the currently supported modes *)
 | 
			
		||||
const
 | 
			
		||||
  SVGA320x200x16	= 0;	(* 320x200x16 Standard EGA/VGA *)
 | 
			
		||||
  SVGA640x200x16	= 1;	(* 640x200x16 Standard EGA/VGA *)
 | 
			
		||||
  SVGA640x350x16	= 2;	(* 640x350x16 Standard EGA/VGA *)
 | 
			
		||||
  SVGA640x480x16	= 3;	(* 640x480x16 Standard VGA *)
 | 
			
		||||
  SVGA800x600x16	= 4;	(* 800x600x16 SuperVGA/VESA *)
 | 
			
		||||
  SVGA1024x768x16	= 5;	(* 1024x768x16 SuperVGA/VESA *)
 | 
			
		||||
 | 
			
		||||
  XNOR_PUT		= 5;
 | 
			
		||||
  NAND_PUT		= 6;
 | 
			
		||||
  NOR_PUT		= 7;
 | 
			
		||||
 | 
			
		||||
(* Setvgapalette sets the entire 16 color palette *)
 | 
			
		||||
(* PalBuf contains RGB values for all 16 colors   *)
 | 
			
		||||
(* R,G,B values range from 0 to 63	           *)
 | 
			
		||||
procedure SetVGAPalette16(PalBuf : DacPalette16);
 | 
			
		||||
var
 | 
			
		||||
  Reg : Registers;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  reg.ax := $1012;
 | 
			
		||||
  reg.bx := 0;
 | 
			
		||||
  reg.cx := 16;
 | 
			
		||||
  reg.es := Seg(PalBuf);
 | 
			
		||||
  reg.dx := Ofs(PalBuf);
 | 
			
		||||
  intr($10,reg);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								BGI/SVGA256.BGI
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								BGI/SVGA256.BGI
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										47
									
								
								BGI/SVGA256.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								BGI/SVGA256.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
			
		||||
/************************************************/
 | 
			
		||||
/* 						*/
 | 
			
		||||
/*       SuperVGA 256 BGI driver defines	*/
 | 
			
		||||
/*		Copyright (c) 1991		*/
 | 
			
		||||
/*	    Jordan Hargraphix Software		*/
 | 
			
		||||
/*						*/
 | 
			
		||||
/************************************************/
 | 
			
		||||
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
 | 
			
		||||
typedef unsigned char DacPalette256[256][3];
 | 
			
		||||
 | 
			
		||||
extern int far _Cdecl Svga256_fdriver[];
 | 
			
		||||
 | 
			
		||||
/* These are the currently supported modes */
 | 
			
		||||
#define	SVGA320x200x256		0	/* 320x200x256 Standard VGA */
 | 
			
		||||
#define	SVGA640x400x256		1	/* 640x400x256 Svga/VESA */
 | 
			
		||||
#define	SVGA640x480x256		2	/* 640x480x256 Svga/VESA */
 | 
			
		||||
#define	SVGA800x600x256		3	/* 800x600x256 Svga/VESA */
 | 
			
		||||
#define SVGA1024x768x256	4	/* 1024x768x256 Svga/VESA */
 | 
			
		||||
 | 
			
		||||
#ifndef XNOR_PUT
 | 
			
		||||
#define XNOR_PUT	5
 | 
			
		||||
#define NAND_PUT	6
 | 
			
		||||
#define NOR_PUT		7
 | 
			
		||||
#endif
 | 
			
		||||
#define TRANS_COPY_PUT	8
 | 
			
		||||
 | 
			
		||||
/* Setvgapalette256 sets the entire 256 color palette */
 | 
			
		||||
/* PalBuf contains RGB values for all 256 colors      */
 | 
			
		||||
/* R,G,B values range from 0 to 63	              */
 | 
			
		||||
/* Usage:					      */
 | 
			
		||||
/*  DacPalette256 dac256;			      */
 | 
			
		||||
/*						      */
 | 
			
		||||
/* setvgapalette256(&dac256);			      */
 | 
			
		||||
void setvgapalette256(DacPalette256 *PalBuf)
 | 
			
		||||
{
 | 
			
		||||
  struct REGPACK reg;
 | 
			
		||||
 | 
			
		||||
  reg.r_ax = 0x1012;
 | 
			
		||||
  reg.r_bx = 0;
 | 
			
		||||
  reg.r_cx = 256;
 | 
			
		||||
  reg.r_es = FP_SEG(PalBuf);
 | 
			
		||||
  reg.r_dx = FP_OFF(PalBuf);
 | 
			
		||||
  intr(0x10,®);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										38
									
								
								BGI/SVGA256.INC
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								BGI/SVGA256.INC
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
			
		||||
(************************************************)
 | 
			
		||||
(* 						*)
 | 
			
		||||
(*	 SuperVGA 256 BGI driver defines	*)
 | 
			
		||||
(*		Copyright (c) 1991		*)
 | 
			
		||||
(*	    Jordan Hargraphix Software		*)
 | 
			
		||||
(*						*)
 | 
			
		||||
(************************************************)
 | 
			
		||||
 | 
			
		||||
type DacPalette256 = array[0..255] of array[0..2] of Byte;
 | 
			
		||||
 | 
			
		||||
(* These are the currently supported modes *)
 | 
			
		||||
const
 | 
			
		||||
  SVGA320x200x256	= 0;	(* 320x200x256 Standard VGA *)
 | 
			
		||||
  SVGA640x400x256	= 1;	(* 640x400x256 Svga *)
 | 
			
		||||
  SVGA640x480x256	= 2;	(* 640x480x256 Svga *)
 | 
			
		||||
  SVGA800x600x256	= 3;	(* 800x600x256 Svga *)
 | 
			
		||||
  SVGA1024x768x256	= 4;	(* 1024x768x256 Svga *)
 | 
			
		||||
 | 
			
		||||
  TRANS_COPY_PIX	= 8;
 | 
			
		||||
 | 
			
		||||
(* Setvgapalette sets the entire 256 color palette *)
 | 
			
		||||
(* PalBuf contains RGB values for all 256 colors   *)
 | 
			
		||||
(* R,G,B values range from 0 to 63	           *)
 | 
			
		||||
procedure SetVGAPalette256(PalBuf : DacPalette256);
 | 
			
		||||
var
 | 
			
		||||
  Reg : Registers;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  reg.ax := $1012;
 | 
			
		||||
  reg.bx := 0;
 | 
			
		||||
  reg.cx := 256;
 | 
			
		||||
  reg.es := Seg(PalBuf);
 | 
			
		||||
  reg.dx := Ofs(PalBuf);
 | 
			
		||||
  intr($10,reg);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								BGI/TWK16.BGI
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								BGI/TWK16.BGI
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										48
									
								
								BGI/TWK16.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								BGI/TWK16.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
/************************************************/
 | 
			
		||||
/* 						*/
 | 
			
		||||
/*        Tweaked 16 BGI driver defines		*/
 | 
			
		||||
/*		Copyright (c) 1991		*/
 | 
			
		||||
/*	    Jordan Hargraphix Software		*/
 | 
			
		||||
/*						*/
 | 
			
		||||
/************************************************/
 | 
			
		||||
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
 | 
			
		||||
typedef unsigned char DacPalette16[16][3];
 | 
			
		||||
 | 
			
		||||
extern int far Twk16_fdriver[];
 | 
			
		||||
 | 
			
		||||
/* These are the currently supported modes */
 | 
			
		||||
#define TWK704x528x16	0	/* 704x528x16 Tweaked VGA */
 | 
			
		||||
#define TWK720x540x16	1	/* 720x540x16 Tweaked VGA */
 | 
			
		||||
#define TWK736x552x16	2	/* 736x552x16 Tweaked VGA */
 | 
			
		||||
#define TWK752x564x16	3	/* 752x564x16 Tweaked VGA */
 | 
			
		||||
#define TWK784x588x16	4	/* 784x588x16 Tweaked VGA */
 | 
			
		||||
#define TWK800x600x16	5	/* 800x600x16 Tweaked VGA */
 | 
			
		||||
 | 
			
		||||
#ifndef XNOR_PUT
 | 
			
		||||
#define	XNOR_PUT	5
 | 
			
		||||
#define NAND_PUT	6
 | 
			
		||||
#define NOR_PUT		7
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Setvgapalette16 sets the entire 16 color palette */
 | 
			
		||||
/* PalBuf contains RGB values for all 16 colors     */
 | 
			
		||||
/* R,G,B values range from 0 to 63	            */
 | 
			
		||||
/* Usage: 					    */ 
 | 
			
		||||
/*  DacPalette16 dac16;                             */
 | 
			
		||||
/*						    */
 | 
			
		||||
/*  setvgapalette(&dac16);			    */
 | 
			
		||||
void setvgapalette16(DacPalette16 *PalBuf)
 | 
			
		||||
{
 | 
			
		||||
  struct REGPACK reg;
 | 
			
		||||
 | 
			
		||||
  reg.r_ax = 0x1012;
 | 
			
		||||
  reg.r_bx = 0;
 | 
			
		||||
  reg.r_cx = 16;
 | 
			
		||||
  reg.r_es = FP_SEG(PalBuf);
 | 
			
		||||
  reg.r_dx = FP_OFF(PalBuf);
 | 
			
		||||
  intr(0x10,®);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										39
									
								
								BGI/TWK16.INC
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								BGI/TWK16.INC
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
(************************************************)
 | 
			
		||||
(* 						*)
 | 
			
		||||
(*	  SuperVGA 16 BGI driver defines	*)
 | 
			
		||||
(*		Copyright (c) 1991		*)
 | 
			
		||||
(*	    Jordan Hargraphix Software		*)
 | 
			
		||||
(*						*)
 | 
			
		||||
(************************************************)
 | 
			
		||||
 | 
			
		||||
type DacPalette16 = array[0..15] of array[0..2] of Byte;
 | 
			
		||||
 | 
			
		||||
(* These are the currently supported modes *)
 | 
			
		||||
const
 | 
			
		||||
 TWK704x528x16		= 0	(* 704x528x16 Tweaked VGA *)
 | 
			
		||||
 TWK720x540x16		= 1	(* 720x540x16 Tweaked VGA *)
 | 
			
		||||
 TWK736x552x16		= 2	(* 736x552x16 Tweaked VGA *)
 | 
			
		||||
 TWK752x564x16		= 3	(* 752x564x16 Tweaked VGA *)
 | 
			
		||||
 TWK784x588x16		= 4	(* 784x588x16 Tweaked VGA *)
 | 
			
		||||
 TWK800x600x16		= 5	(* 800x600x16 Tweaked VGA *)
 | 
			
		||||
 | 
			
		||||
  XNOR_PUT		= 5;
 | 
			
		||||
  NAND_PUT		= 6;
 | 
			
		||||
  NOR_PUT		= 7;
 | 
			
		||||
 | 
			
		||||
(* Setvgapalette sets the entire 16 color palette *)
 | 
			
		||||
(* PalBuf contains RGB values for all 16 colors   *)
 | 
			
		||||
(* R,G,B values range from 0 to 63	           *)
 | 
			
		||||
procedure SetVGAPalette16(PalBuf : DacPalette16);
 | 
			
		||||
var
 | 
			
		||||
  Reg : Registers;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  reg.ax := $1012;
 | 
			
		||||
  reg.bx := 0;
 | 
			
		||||
  reg.cx := 16;
 | 
			
		||||
  reg.es := Seg(PalBuf);
 | 
			
		||||
  reg.dx := Ofs(PalBuf);
 | 
			
		||||
  intr($10,reg);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								BGI/TWK256.BGI
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								BGI/TWK256.BGI
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										48
									
								
								BGI/TWK256.H
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								BGI/TWK256.H
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
			
		||||
/************************************************/
 | 
			
		||||
/* 						*/
 | 
			
		||||
/*        Tweaked 256 BGI driver defines	*/
 | 
			
		||||
/*		Copyright (c) 1991		*/
 | 
			
		||||
/*	    Jordan Hargraphix Software		*/
 | 
			
		||||
/*						*/
 | 
			
		||||
/************************************************/
 | 
			
		||||
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
 | 
			
		||||
typedef unsigned char DacPalette256[256][3];
 | 
			
		||||
 | 
			
		||||
extern int far _Cdecl Twk256_fdriver[];
 | 
			
		||||
 | 
			
		||||
/* These are the currently supported modes */
 | 
			
		||||
#define	TWK320x400x256		0
 | 
			
		||||
#define	TWK320x480x256		1
 | 
			
		||||
#define	TWK360x480x256		2
 | 
			
		||||
#define	TWK376x564x256		3
 | 
			
		||||
#define	TWK400x564x256		4
 | 
			
		||||
#define	TWK400x600x256		5
 | 
			
		||||
 | 
			
		||||
#ifndef XNOR_PUT
 | 
			
		||||
#define XNOR_PUT	5
 | 
			
		||||
#define NAND_PUT	6
 | 
			
		||||
#define NOR_PUT		7
 | 
			
		||||
#endif
 | 
			
		||||
#define TRANS_COPY_PUT	8
 | 
			
		||||
 | 
			
		||||
/* Setvgapalette256 sets the entire 256 color palette */
 | 
			
		||||
/* PalBuf contains RGB values for all 256 colors      */
 | 
			
		||||
/* R,G,B values range from 0 to 63	              */
 | 
			
		||||
/* Usage:					      */
 | 
			
		||||
/*  DacPalette256 dac256;			      */
 | 
			
		||||
/*						      */
 | 
			
		||||
/* setvgapalette256(&dac256);			      */
 | 
			
		||||
void setvgapalette256(DacPalette256 *PalBuf)
 | 
			
		||||
{
 | 
			
		||||
  struct REGPACK reg;
 | 
			
		||||
 | 
			
		||||
  reg.r_ax = 0x1012;
 | 
			
		||||
  reg.r_bx = 0;
 | 
			
		||||
  reg.r_cx = 256;
 | 
			
		||||
  reg.r_es = FP_SEG(PalBuf);
 | 
			
		||||
  reg.r_dx = FP_OFF(PalBuf);
 | 
			
		||||
  intr(0x10,®);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										39
									
								
								BGI/TWK256.INC
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								BGI/TWK256.INC
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
(************************************************)
 | 
			
		||||
(* 						*)
 | 
			
		||||
(*	  Tweaked 256 BGI driver defines	*)
 | 
			
		||||
(*		Copyright (c) 1991		*)
 | 
			
		||||
(*	    Jordan Hargraphix Software		*)
 | 
			
		||||
(*						*)
 | 
			
		||||
(************************************************)
 | 
			
		||||
 | 
			
		||||
type DacPalette256 = array[0..255] of array[0..2] of Byte;
 | 
			
		||||
 | 
			
		||||
(* These are the currently supported modes *)
 | 
			
		||||
const
 | 
			
		||||
  TWK320x400x256	= 0;
 | 
			
		||||
  TWK320x480x256	= 1;
 | 
			
		||||
  TWK360x480x256	= 2;
 | 
			
		||||
  TWK376x564x256	= 3;
 | 
			
		||||
  TWK400x564x256	= 4;
 | 
			
		||||
  TWK400x600x256	= 5;
 | 
			
		||||
 | 
			
		||||
  TRANS_COPY_PIX	= 8;
 | 
			
		||||
 | 
			
		||||
(* Setvgapalette sets the entire 256 color palette *)
 | 
			
		||||
(* PalBuf contains RGB values for all 256 colors   *)
 | 
			
		||||
(* R,G,B values range from 0 to 63	           *)
 | 
			
		||||
procedure SetVGAPalette256(PalBuf : DacPalette256);
 | 
			
		||||
var
 | 
			
		||||
  Reg : Registers;
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  reg.ax := $1012;
 | 
			
		||||
  reg.bx := 0;
 | 
			
		||||
  reg.cx := 256;
 | 
			
		||||
  reg.es := Seg(PalBuf);
 | 
			
		||||
  reg.dx := Ofs(PalBuf);
 | 
			
		||||
  intr($10,reg);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								BGI/VGADEMO.EXE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								BGI/VGADEMO.EXE
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										1608
									
								
								BGI/VGADEMO.PAS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1608
									
								
								BGI/VGADEMO.PAS
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										383
									
								
								FILMA_1.C
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										383
									
								
								FILMA_1.C
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,383 @@
 | 
			
		||||
/*****************************************************************************/
 | 
			
		||||
/*                      TECNICA FILMATION (1<> PARTE)                         */
 | 
			
		||||
/*                                                                           */
 | 
			
		||||
/*      por: Jos<6F> Antonio Acedo Mart<72>n-Grande, miembro de "GOLDY GAMES"      */
 | 
			
		||||
/*                                                                           */
 | 
			
		||||
/*                      TEL: (91) 6 11 72 71 (MADRID)                        */
 | 
			
		||||
/*****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**************************** FICHEROS A INCLUIR  ****************************/
 | 
			
		||||
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
#include <bios.h>
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <alloc.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
/******************************* DEFINICIONES ********************************/
 | 
			
		||||
 | 
			
		||||
#define ALFANUMERICO     3
 | 
			
		||||
#define GRAFICO     	19
 | 
			
		||||
#define COLOR            0
 | 
			
		||||
#define ULTIMO		-1
 | 
			
		||||
 | 
			
		||||
/*********************** DECLARACIONES DE FUNCIONES **************************/
 | 
			
		||||
 | 
			
		||||
void  BORRA_ZONA_MEMORIA(char *, int);
 | 
			
		||||
void  COPIA_ZONA_MEMORIA(char *, char *);
 | 
			
		||||
void  DIBUJA_BLOQUE    (int *, char *, char *);
 | 
			
		||||
void  DIBUJA_BLOQUE_CUT(int *, char *, char *);
 | 
			
		||||
void  VUELCA_PANTALLA(int,int, int,int, int,int, char *);
 | 
			
		||||
void  SET_VECTORES(volatile char *);
 | 
			
		||||
void  UNSET_VECTORES(void);
 | 
			
		||||
void  asigna_modo_video(char);
 | 
			
		||||
void  lee_ficheros(const char *, char *);
 | 
			
		||||
void  descomprime_dibujo(char *);
 | 
			
		||||
void  asigna_rgb(char *);
 | 
			
		||||
void  asigna_memoria(void);
 | 
			
		||||
void  libera_memoria(void);
 | 
			
		||||
void  error_memoria(void);
 | 
			
		||||
void  error_fichero(void);
 | 
			
		||||
void  salir_al_dos(void);
 | 
			
		||||
 | 
			
		||||
/*************************** VARIABLES GLOBALES /*****************************/
 | 
			
		||||
 | 
			
		||||
char *dir_carga_dibujos;
 | 
			
		||||
char *dir_dibujo1;
 | 
			
		||||
char *dir_muestra_dibujo1;
 | 
			
		||||
char *dir_zona_pantalla;
 | 
			
		||||
FILE *handle_dibujos;
 | 
			
		||||
char  mapa_teclado[256];
 | 
			
		||||
char  dibujo1[] = "filma_1.pcx";
 | 
			
		||||
int   logotipo_filmation  [6] = {   0,31,   0,182, 133,14 };
 | 
			
		||||
int   logotipo_parte1     [6] = { 133,31,   0,  0,  64,18 };
 | 
			
		||||
int   logotipo_goldy_games[6] = {   0,46, 206,182, 114,18 };
 | 
			
		||||
 | 
			
		||||
int   mapa_zona_1[][6] = {   0,  0, 144, 36, 32,15, /* suelo rojo */
 | 
			
		||||
			     0,  0, 112, 52, 32,15,
 | 
			
		||||
			     0,  0, 144, 52, 32,15,
 | 
			
		||||
			     0,  0, 176, 52, 32,15,
 | 
			
		||||
			     0,  0,  80, 68, 32,15,
 | 
			
		||||
			     0,  0, 112, 68, 32,15,
 | 
			
		||||
			     0,  0, 144, 68, 32,15,
 | 
			
		||||
			     0,  0, 176, 68, 32,15,
 | 
			
		||||
			     0,  0, 208, 68, 32,15,
 | 
			
		||||
			     0,  0,  48, 84, 32,15,
 | 
			
		||||
			     0,  0,  80, 84, 32,15,
 | 
			
		||||
			     0,  0, 112, 84, 32,15,
 | 
			
		||||
			     0,  0, 144, 84, 32,15,
 | 
			
		||||
			     0,  0, 176, 84, 32,15,
 | 
			
		||||
			     0,  0, 208, 84, 32,15,
 | 
			
		||||
			     0,  0, 240, 84, 32,15,
 | 
			
		||||
			     0,  0,  16,100, 32,15,
 | 
			
		||||
			     0,  0,  48,100, 32,15,
 | 
			
		||||
			     0,  0,  80,100, 32,15,
 | 
			
		||||
			     0,  0, 112,100, 32,15,
 | 
			
		||||
			     0,  0, 144,100, 32,15,
 | 
			
		||||
			     0,  0, 176,100, 32,15,
 | 
			
		||||
			     0,  0, 208,100, 32,15,
 | 
			
		||||
			     0,  0, 240,100, 32,15,
 | 
			
		||||
			     0,  0, 272,100, 32,15,
 | 
			
		||||
			     0,  0,  16,116, 32,15,
 | 
			
		||||
			     0,  0,  48,116, 32,15,
 | 
			
		||||
			     0,  0,  80,116, 32,15,
 | 
			
		||||
			     0,  0, 112,116, 32,15,
 | 
			
		||||
			     0,  0, 144,116, 32,15,
 | 
			
		||||
			     0,  0, 176,116, 32,15,
 | 
			
		||||
			     0,  0, 208,116, 32,15,
 | 
			
		||||
			     0,  0, 240,116, 32,15,
 | 
			
		||||
			     0,  0, 272,116, 32,15,
 | 
			
		||||
			     0,  0,  48,132, 32,15,
 | 
			
		||||
			     0,  0,  80,132, 32,15,
 | 
			
		||||
			     0,  0, 112,132, 32,15,
 | 
			
		||||
			     0,  0, 144,132, 32,15,
 | 
			
		||||
			     0,  0, 176,132, 32,15,
 | 
			
		||||
			     0,  0, 208,132, 32,15,
 | 
			
		||||
			     0,  0, 240,132, 32,15,
 | 
			
		||||
			     0,  0,  80,148, 32,15,
 | 
			
		||||
			     0,  0, 112,148, 32,15,
 | 
			
		||||
			     0,  0, 144,148, 32,15,
 | 
			
		||||
			     0,  0, 176,148, 32,15,
 | 
			
		||||
			     0,  0, 208,148, 32,15,
 | 
			
		||||
			     0,  0, 112,164, 32,15,
 | 
			
		||||
			     0,  0, 144,164, 32,15,
 | 
			
		||||
			     0,  0, 176,164, 32,15,
 | 
			
		||||
			     0,  0, 144,180, 32,15,
 | 
			
		||||
 | 
			
		||||
			    32,  0, 128, 44, 32,15, /* suelo amarillo */
 | 
			
		||||
			    32,  0, 160, 44, 32,15,
 | 
			
		||||
			    32,  0,  96, 60, 32,15,
 | 
			
		||||
			    32,  0, 128, 60, 32,15,
 | 
			
		||||
			    32,  0, 160, 60, 32,15,
 | 
			
		||||
			    32,  0, 192, 60, 32,15,
 | 
			
		||||
			    32,  0,  64, 76, 32,15,
 | 
			
		||||
			    32,  0,  96, 76, 32,15,
 | 
			
		||||
                            32,  0, 128, 76, 32,15,
 | 
			
		||||
			    32,  0, 160, 76, 32,15,
 | 
			
		||||
			    32,  0, 192, 76, 32,15,
 | 
			
		||||
			    32,  0, 224, 76, 32,15,
 | 
			
		||||
			    32,  0,  32, 92, 32,15,
 | 
			
		||||
			    32,  0,  64, 92, 32,15,
 | 
			
		||||
			    32,  0,  96, 92, 32,15,
 | 
			
		||||
			    32,  0, 128, 92, 32,15,
 | 
			
		||||
			    32,  0, 160, 92, 32,15,
 | 
			
		||||
			    32,  0, 192, 92, 32,15,
 | 
			
		||||
			    32,  0, 224, 92, 32,15,
 | 
			
		||||
			    32,  0, 256, 92, 32,15,
 | 
			
		||||
			    32,  0,   0,108, 32,15,
 | 
			
		||||
			    32,  0,  32,108, 32,15,
 | 
			
		||||
			    32,  0,  64,108, 32,15,
 | 
			
		||||
			    32,  0,  96,108, 32,15,
 | 
			
		||||
			    32,  0, 128,108, 32,15,
 | 
			
		||||
			    32,  0, 160,108, 32,15,
 | 
			
		||||
			    32,  0, 192,108, 32,15,
 | 
			
		||||
			    32,  0, 224,108, 32,15,
 | 
			
		||||
			    32,  0, 256,108, 32,15,
 | 
			
		||||
			    32,  0, 288,108, 32,15,
 | 
			
		||||
			    32,  0,  32,124, 32,15,
 | 
			
		||||
			    32,  0,  64,124, 32,15,
 | 
			
		||||
			    32,  0,  96,124, 32,15,
 | 
			
		||||
			    32,  0, 128,124, 32,15,
 | 
			
		||||
			    32,  0, 160,124, 32,15,
 | 
			
		||||
			    32,  0, 192,124, 32,15,
 | 
			
		||||
			    32,  0, 224,124, 32,15,
 | 
			
		||||
			    32,  0, 256,124, 32,15,
 | 
			
		||||
			    32,  0,  64,140, 32,15,
 | 
			
		||||
			    32,  0,  96,140, 32,15,
 | 
			
		||||
			    32,  0, 128,140, 32,15,
 | 
			
		||||
			    32,  0, 160,140, 32,15,
 | 
			
		||||
			    32,  0, 192,140, 32,15,
 | 
			
		||||
			    32,  0, 224,140, 32,15,
 | 
			
		||||
			    32,  0,  96,156, 32,15,
 | 
			
		||||
			    32,  0, 128,156, 32,15,
 | 
			
		||||
			    32,  0, 160,156, 32,15,
 | 
			
		||||
			    32,  0, 192,156, 32,15,
 | 
			
		||||
			    32,  0, 128,172, 32,15,
 | 
			
		||||
			    32,  0, 160,172, 32,15,
 | 
			
		||||
 | 
			
		||||
			     0, 15,   0,116, 16,12, /* borde suelo izq */
 | 
			
		||||
			     0, 15,  16,124, 16,12,
 | 
			
		||||
			     0, 15,  32,132, 16,12,
 | 
			
		||||
			     0, 15,  48,140, 16,12,
 | 
			
		||||
			     0, 15,  64,148, 16,12,
 | 
			
		||||
                             0, 15,  80,156, 16,12,
 | 
			
		||||
			     0, 15,  96,164, 16,12,
 | 
			
		||||
			     0, 15, 112,172, 16,12,
 | 
			
		||||
			     0, 15, 128,180, 16,12,
 | 
			
		||||
			     0, 15, 144,188, 16,12,
 | 
			
		||||
 | 
			
		||||
			    16, 15, 304,116, 16,12, /* borde suelo der */
 | 
			
		||||
			    16, 15, 288,124, 16,12,
 | 
			
		||||
			    16, 15, 272,132, 16,12,
 | 
			
		||||
                            16, 15, 256,140, 16,12,
 | 
			
		||||
			    16, 15, 240,148, 16,12,
 | 
			
		||||
			    16, 15, 224,156, 16,12,
 | 
			
		||||
			    16, 15, 208,164, 16,12,
 | 
			
		||||
			    16, 15, 192,172, 16,12,
 | 
			
		||||
			    16, 15, 176,180, 16,12,
 | 
			
		||||
			    16, 15, 160,188, 16,12,
 | 
			
		||||
 | 
			
		||||
			   288,  0, 128,-28, 32,79, /* pared izq */
 | 
			
		||||
			   288,  0,  96,-12, 32,79,
 | 
			
		||||
			   288,  0,  64,  4, 32,79,
 | 
			
		||||
			   288,  0,  32, 20, 32,79,
 | 
			
		||||
			   288,  0,   0, 36, 32,79,
 | 
			
		||||
 | 
			
		||||
			   256,  0, 160,-28, 32,79, /* pared der */
 | 
			
		||||
			   256,  0, 192,-12, 32,79,
 | 
			
		||||
			   256,  0, 224,  4, 32,79,
 | 
			
		||||
			   256,  0, 256, 20, 32,79,
 | 
			
		||||
			   256,  0, 288, 36, 32,79,
 | 
			
		||||
			   ULTIMO
 | 
			
		||||
			 };
 | 
			
		||||
 | 
			
		||||
int   objetos_zona_1[6];	  /* array para las coordenadas de los cubos */
 | 
			
		||||
 | 
			
		||||
int   xyz_objetos_zona_1[][8] = {  64,0,  0, 0, 0, 32,30, +2, /* cubo rojo   */
 | 
			
		||||
				   96,0,  8, 0,24, 32,30, +2, /* cubo verde  */
 | 
			
		||||
				  128,0, 16, 0,48, 32,30, -2, /* cubo azul   */
 | 
			
		||||
				  160,0, 24, 0,72, 32,30, +2, /* cubo marr<72>n */
 | 
			
		||||
				  ULTIMO
 | 
			
		||||
				};
 | 
			
		||||
 | 
			
		||||
/********************************* PROGRAMA **********************************/
 | 
			
		||||
 | 
			
		||||
void main(void)
 | 
			
		||||
{
 | 
			
		||||
	int bloq, cubo, x, y, z;
 | 
			
		||||
 | 
			
		||||
	asigna_memoria();
 | 
			
		||||
	asigna_modo_video(GRAFICO);
 | 
			
		||||
	lee_ficheros(dibujo1, dir_dibujo1);
 | 
			
		||||
	SET_VECTORES(mapa_teclado);
 | 
			
		||||
	BORRA_ZONA_MEMORIA(dir_muestra_dibujo1, COLOR);
 | 
			
		||||
	DIBUJA_BLOQUE(logotipo_filmation,   dir_dibujo1, dir_muestra_dibujo1);
 | 
			
		||||
	DIBUJA_BLOQUE(logotipo_parte1,      dir_dibujo1, dir_muestra_dibujo1);
 | 
			
		||||
	DIBUJA_BLOQUE(logotipo_goldy_games, dir_dibujo1, dir_muestra_dibujo1);
 | 
			
		||||
 | 
			
		||||
	for(bloq=0; mapa_zona_1[bloq][0]!=ULTIMO; bloq++)
 | 
			
		||||
	  DIBUJA_BLOQUE_CUT(&mapa_zona_1[bloq][0], dir_dibujo1, dir_muestra_dibujo1);
 | 
			
		||||
 | 
			
		||||
        while(mapa_teclado[0]==0)
 | 
			
		||||
	{
 | 
			
		||||
	  COPIA_ZONA_MEMORIA(dir_muestra_dibujo1, dir_zona_pantalla);
 | 
			
		||||
 | 
			
		||||
	  for(bloq=0; xyz_objetos_zona_1[bloq][0]!=ULTIMO; bloq++)
 | 
			
		||||
	  {
 | 
			
		||||
	    x=xyz_objetos_zona_1[bloq][2];
 | 
			
		||||
	    y=xyz_objetos_zona_1[bloq][3];
 | 
			
		||||
	    z=xyz_objetos_zona_1[bloq][4];
 | 
			
		||||
 | 
			
		||||
	    objetos_zona_1[0]=xyz_objetos_zona_1[bloq][0];
 | 
			
		||||
	    objetos_zona_1[1]=xyz_objetos_zona_1[bloq][1];
 | 
			
		||||
	    objetos_zona_1[2]=144+((x-z)    << 1);
 | 
			
		||||
	    objetos_zona_1[3]= 21+ (x+z)-(y << 1);
 | 
			
		||||
	    objetos_zona_1[4]=xyz_objetos_zona_1[bloq][5];
 | 
			
		||||
	    objetos_zona_1[5]=xyz_objetos_zona_1[bloq][6];
 | 
			
		||||
	    DIBUJA_BLOQUE_CUT(objetos_zona_1, dir_dibujo1, dir_zona_pantalla);
 | 
			
		||||
	  }
 | 
			
		||||
 | 
			
		||||
	  VUELCA_PANTALLA(0,0, 0,0, 320,200, dir_zona_pantalla);
 | 
			
		||||
 | 
			
		||||
	  for(cubo=0; xyz_objetos_zona_1[cubo][0]!=ULTIMO; cubo++)
 | 
			
		||||
	  {
 | 
			
		||||
	    if(xyz_objetos_zona_1[cubo][2]==0)
 | 
			
		||||
	    {
 | 
			
		||||
	      xyz_objetos_zona_1[cubo][7]=+2;
 | 
			
		||||
	      sound(1000+(500*cubo));
 | 
			
		||||
	      delay(10);
 | 
			
		||||
	      nosound();
 | 
			
		||||
	    }
 | 
			
		||||
	    else if(xyz_objetos_zona_1[cubo][2]==72)
 | 
			
		||||
	    {
 | 
			
		||||
	      xyz_objetos_zona_1[cubo][7]=-2;
 | 
			
		||||
	      sound(2000+(500*cubo));
 | 
			
		||||
	      delay(10);
 | 
			
		||||
	      nosound();
 | 
			
		||||
	    }
 | 
			
		||||
	    xyz_objetos_zona_1[cubo][2]+=xyz_objetos_zona_1[cubo][7];
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	salir_al_dos();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void salir_al_dos(void)
 | 
			
		||||
{
 | 
			
		||||
        asigna_modo_video(ALFANUMERICO);
 | 
			
		||||
        libera_memoria();
 | 
			
		||||
	UNSET_VECTORES();
 | 
			
		||||
	textcolor(WHITE); textbackground(BLUE);
 | 
			
		||||
	cprintf("Copyright (c) Goldy Games 1994. Jos<6F> Antonio Acedo Mart<72>n-Grande. Continuar<61> ...");
 | 
			
		||||
	gotoxy(1,24);
 | 
			
		||||
        exit(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void asigna_memoria(void)
 | 
			
		||||
{
 | 
			
		||||
	if((dir_carga_dibujos  =(char *)malloc(320*200))==NULL) error_memoria();
 | 
			
		||||
	if((dir_dibujo1        =(char *)malloc(320*200))==NULL) error_memoria();
 | 
			
		||||
	if((dir_muestra_dibujo1=(char *)malloc(320*200))==NULL) error_memoria();
 | 
			
		||||
	if((dir_zona_pantalla  =(char *)malloc(320*200))==NULL) error_memoria();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void libera_memoria(void)
 | 
			
		||||
{
 | 
			
		||||
        free(dir_carga_dibujos);
 | 
			
		||||
	free(dir_dibujo1);
 | 
			
		||||
	free(dir_muestra_dibujo1);
 | 
			
		||||
	free(dir_zona_pantalla);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void error_memoria(void)
 | 
			
		||||
{
 | 
			
		||||
        asigna_modo_video(ALFANUMERICO);
 | 
			
		||||
        libera_memoria();
 | 
			
		||||
        printf("No hay suficiente memoria. Libere programas residentes.");
 | 
			
		||||
        exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void error_fichero(void)
 | 
			
		||||
{
 | 
			
		||||
        asigna_modo_video(ALFANUMERICO);
 | 
			
		||||
        libera_memoria();
 | 
			
		||||
        printf("Error leyendo fichero .PCX");
 | 
			
		||||
        exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void asigna_modo_video(char modo)     /* asigna el modo de v<>deo indicado */
 | 
			
		||||
{                                     /* en la variable "modo"            */
 | 
			
		||||
        union REGS ent, sal;
 | 
			
		||||
 | 
			
		||||
        ent.h.al = modo;
 | 
			
		||||
        ent.h.ah = 0;
 | 
			
		||||
	int86(16, &ent, &sal);        /* funci<63>n para asignar el modo de video */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void lee_ficheros(const char *file, char *dir_dibujo)
 | 
			
		||||
{
 | 
			
		||||
        char *dir;
 | 
			
		||||
 | 
			
		||||
        dir=dir_carga_dibujos;
 | 
			
		||||
        if((handle_dibujos = fopen(file, "rb"))==NULL) error_fichero();
 | 
			
		||||
        while(!feof(handle_dibujos)) { *dir++=getc(handle_dibujos); }
 | 
			
		||||
        fclose(handle_dibujos);
 | 
			
		||||
        descomprime_dibujo(dir_dibujo);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void descomprime_dibujo(char *dir_escritura)
 | 
			
		||||
{
 | 
			
		||||
        unsigned char  byte;
 | 
			
		||||
                 char *dir_lectura;
 | 
			
		||||
                 int   columnas, filas, contador;
 | 
			
		||||
 | 
			
		||||
	dir_lectura=dir_carga_dibujos+128;   /* inicio del dibujo comprimido */
 | 
			
		||||
 | 
			
		||||
	for(filas=200; filas>0; filas--)
 | 
			
		||||
	{
 | 
			
		||||
          columnas=320;
 | 
			
		||||
          dir_escritura-=columnas; dir_escritura+=320;
 | 
			
		||||
	  while(columnas>0)
 | 
			
		||||
	  {
 | 
			
		||||
            byte=(unsigned)*dir_lectura++;
 | 
			
		||||
	    if(byte<=192)
 | 
			
		||||
	    {
 | 
			
		||||
	      *dir_escritura++=byte; columnas--;
 | 
			
		||||
	    }
 | 
			
		||||
	    else
 | 
			
		||||
	    {
 | 
			
		||||
              contador=byte&63; byte=*dir_lectura++;
 | 
			
		||||
	      for(; contador>0; contador--)
 | 
			
		||||
	      {
 | 
			
		||||
		*dir_escritura++=byte; columnas--;
 | 
			
		||||
	      }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
	asigna_rgb(dir_lectura+1);     /* remapea los 256 colores del dibujo */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void asigna_rgb(char *dir_lectura)
 | 
			
		||||
{
 | 
			
		||||
        struct   SREGS  seg;
 | 
			
		||||
        union     REGS  ent, sal;
 | 
			
		||||
        unsigned  int   n;
 | 
			
		||||
        long      int   dir;
 | 
			
		||||
                  char *dir_col;
 | 
			
		||||
 | 
			
		||||
	dir_col=dir_lectura;                      /* divide entre  */
 | 
			
		||||
	for(n=256*3; n>0; n--) {                  /* 4 los colores */
 | 
			
		||||
          *dir_col=*dir_col >> 2; dir_col++;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	dir   =(long)dir_lectura;                 /* obtiene el segmento     */
 | 
			
		||||
	seg.es=(int)(dir >> 16);                  /* donde estan los colores */
 | 
			
		||||
 | 
			
		||||
        ent.h.al =  18;
 | 
			
		||||
        ent.h.ah =  16;
 | 
			
		||||
        ent.x.bx =   0;
 | 
			
		||||
        ent.x.cx = 256;
 | 
			
		||||
	ent.x.dx = (int)dir_lectura;       /* offset de los colores            */
 | 
			
		||||
	int86x(0x10, &ent, &sal, &seg);    /* funci<63>n para asignar los colores */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										362
									
								
								MOVES.CPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										362
									
								
								MOVES.CPP
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,362 @@
 | 
			
		||||
int CargaPaleta(char *file );
 | 
			
		||||
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
#include <mem.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
#include <alloc.h>
 | 
			
		||||
//#include <graphics.h>
 | 
			
		||||
 | 
			
		||||
#define NUM_MOVES  4    // Numero de movimientos por secuencia
 | 
			
		||||
 | 
			
		||||
#define IZQUIERDA  0
 | 
			
		||||
#define DERECHA    1
 | 
			
		||||
#define ARRIBA     2
 | 
			
		||||
#define ABAJO      3
 | 
			
		||||
#define IZQARR     4
 | 
			
		||||
#define IZQABJ     5
 | 
			
		||||
#define DERARR     6
 | 
			
		||||
#define DERABJ     7
 | 
			
		||||
 | 
			
		||||
#define OK         0
 | 
			
		||||
#define ERROR      1
 | 
			
		||||
 | 
			
		||||
#define SIZE_PERSONAJE (59*33)
 | 
			
		||||
 | 
			
		||||
typedef unsigned char DacPalette256[256][3];
 | 
			
		||||
 | 
			
		||||
void setvgapalette256(DacPalette256 *PalBuf);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned char far *video_buffer = (char far *)0xA0000000L; // vram byte ptr
 | 
			
		||||
 | 
			
		||||
void putpixel( int x, int y, int color)
 | 
			
		||||
{
 | 
			
		||||
     video_buffer[((y<<8) + (y<<6)) + x] = color;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
 unsigned char Frame[NUM_MOVES][SIZE_PERSONAJE];
 | 
			
		||||
} Pmovim;
 | 
			
		||||
 | 
			
		||||
/*Pmovim *Personaje;*/
 | 
			
		||||
 | 
			
		||||
typedef struct pcx_header_typ
 | 
			
		||||
        {
 | 
			
		||||
        char manufacturer;
 | 
			
		||||
        char version;
 | 
			
		||||
        char encoding;
 | 
			
		||||
        char bits_per_pixel;
 | 
			
		||||
        int x,y;
 | 
			
		||||
        int width,height;
 | 
			
		||||
        int horz_res;
 | 
			
		||||
        int vert_res;
 | 
			
		||||
        char ega_palette[48];
 | 
			
		||||
        char reserved;
 | 
			
		||||
        char num_color_planes;
 | 
			
		||||
        int bytes_per_line;
 | 
			
		||||
        int palette_type;
 | 
			
		||||
        char padding[58];
 | 
			
		||||
 | 
			
		||||
        } PCX_HEADER;
 | 
			
		||||
 | 
			
		||||
Pmovim far *Jugador;
 | 
			
		||||
 | 
			
		||||
#define PALETTE_MASK        0x3c6
 | 
			
		||||
#define PALETTE_REGISTER_RD 0x3c7
 | 
			
		||||
#define PALETTE_REGISTER_WR 0x3c8
 | 
			
		||||
#define PALETTE_DATA        0x3c9
 | 
			
		||||
// this structure holds a RGB triple in three bytes
 | 
			
		||||
 | 
			
		||||
typedef struct RGB_color_typ
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        unsigned char red;    // red   component of color 0-63
 | 
			
		||||
        unsigned char green;  // green component of color 0-63
 | 
			
		||||
        unsigned char blue;   // blue  component of color 0-63
 | 
			
		||||
 | 
			
		||||
        } RGB_color, *RGB_color_ptr;
 | 
			
		||||
 | 
			
		||||
void Set_Palette_Register(int index, RGB_color_ptr color)
 | 
			
		||||
{
 | 
			
		||||
// this function sets a single color look up table value indexed by index
 | 
			
		||||
// with the value in the color structure
 | 
			
		||||
 | 
			
		||||
// tell VGA card we are going to update a pallete register
 | 
			
		||||
 | 
			
		||||
outport(PALETTE_MASK,0xff);
 | 
			
		||||
 | 
			
		||||
// tell vga card which register we will be updating
 | 
			
		||||
 | 
			
		||||
outport(PALETTE_REGISTER_WR, index);
 | 
			
		||||
 | 
			
		||||
// now update the RGB triple, note the same port is used each time
 | 
			
		||||
 | 
			
		||||
outport(PALETTE_DATA,color->red);
 | 
			
		||||
outport(PALETTE_DATA,color->green);
 | 
			
		||||
outport(PALETTE_DATA,color->blue);
 | 
			
		||||
 | 
			
		||||
}; // end Set_Palette_Color
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int IniciaJugador( Pmovim far **JUgador, int Direcciones, char *PCX, long PorDonde )
 | 
			
		||||
{
 | 
			
		||||
 FILE *PCX_ptr;
 | 
			
		||||
 PCX_HEADER pcx_header;
 | 
			
		||||
 int alto, ancho, movimiento;
 | 
			
		||||
 int desplaz, contador;
 | 
			
		||||
 unsigned char byte;
 | 
			
		||||
 int color = -1;
 | 
			
		||||
 int contar = -1;
 | 
			
		||||
 | 
			
		||||
 //Asignamos memoria para los movimientos del jugador
 | 
			
		||||
// if ( ( (*Jugador) = (Pmovim far *)farmalloc( sizeof(Pmovim)*Direcciones ) ) == NULL ) return ERROR;
 | 
			
		||||
 | 
			
		||||
 // Abrimos el fichero de los movimientos
 | 
			
		||||
 if ( ( PCX_ptr = fopen( PCX, "rb" ) ) == NULL ) return ERROR;
 | 
			
		||||
 | 
			
		||||
 // Nos posicionamos en el lugar de comienzo del PCX
 | 
			
		||||
 fseek( PCX_ptr, PorDonde, SEEK_SET );
 | 
			
		||||
 | 
			
		||||
 // Leemos la cabecera
 | 
			
		||||
 fread( &pcx_header, sizeof(PCX_HEADER), 1, PCX_ptr );
 | 
			
		||||
 | 
			
		||||
 // Comprobamos que sea un PCX
 | 
			
		||||
 if ( pcx_header.manufacturer == 10 )
 | 
			
		||||
  {
 | 
			
		||||
   for(alto=0; alto<pcx_header.height; alto++)
 | 
			
		||||
   {
 | 
			
		||||
    for(ancho=0; ancho<pcx_header.width; )
 | 
			
		||||
    {
 | 
			
		||||
      byte=getc(PCX_ptr);
 | 
			
		||||
      if(byte<=0xC0)
 | 
			
		||||
      {
 | 
			
		||||
        for ( movimiento = 0; movimiento < NUM_MOVES; movimiento++ )
 | 
			
		||||
                         if ( alto >= (47+82*movimiento) && alto < (106+82*movimiento) )
 | 
			
		||||
                         {
 | 
			
		||||
                          for ( desplaz = 0; desplaz < Direcciones; desplaz++ )
 | 
			
		||||
                              if ( ancho >= (80+71*desplaz) && ancho < (113+71*desplaz) )
 | 
			
		||||
                              {
 | 
			
		||||
                               Jugador[desplaz]./*->*/ Frame[movimiento][ (ancho-(80+71*desplaz)) + 33 * (alto-(47+82*movimiento)) ] = byte;
 | 
			
		||||
                               break;
 | 
			
		||||
                              }
 | 
			
		||||
                          break;
 | 
			
		||||
                         }
 | 
			
		||||
	ancho++;
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
	contador=byte&0x3F; byte=getc(PCX_ptr);
 | 
			
		||||
	for(; contador>0; contador--)
 | 
			
		||||
	{
 | 
			
		||||
        for ( movimiento = 0; movimiento < NUM_MOVES; movimiento++ )
 | 
			
		||||
                         if ( alto >= (47+82*movimiento) && alto < (106+82*movimiento) )
 | 
			
		||||
                         {
 | 
			
		||||
                          for ( desplaz = 0; desplaz < Direcciones; desplaz++ )
 | 
			
		||||
                              if ( ancho >= (80+71*desplaz) && ancho < (113+71*desplaz) )
 | 
			
		||||
                              {
 | 
			
		||||
                               Jugador[desplaz]./*->*/ Frame[movimiento][ (ancho-(80+71*desplaz)) + 33 * (alto-(47+82*movimiento)) ] = byte;
 | 
			
		||||
                               break;
 | 
			
		||||
                              }
 | 
			
		||||
                          break;
 | 
			
		||||
                         }
 | 
			
		||||
   	  ancho++;
 | 
			
		||||
	}
 | 
			
		||||
      }
 | 
			
		||||
     }
 | 
			
		||||
   }
 | 
			
		||||
  }
 | 
			
		||||
 CargaPaleta( PCX );
 | 
			
		||||
 | 
			
		||||
 // Cerramos el fichero de movimientos
 | 
			
		||||
 fclose( PCX_ptr );
 | 
			
		||||
 | 
			
		||||
 return OK;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void MuestraJugador( unsigned char *BitMap_Ptr, int Px, int Py, char FILL )
 | 
			
		||||
{
 | 
			
		||||
 int x, y;
 | 
			
		||||
 static color = -1;
 | 
			
		||||
 | 
			
		||||
 if ( color == -1 ) color = *(BitMap_Ptr);
 | 
			
		||||
 | 
			
		||||
 for ( x = 0; x < 33; x++ )
 | 
			
		||||
   for ( y = 0; y < 59; y++ )
 | 
			
		||||
    if ( 1 || *(BitMap_Ptr + x + y*33) != color )
 | 
			
		||||
        if ( FILL==1 )
 | 
			
		||||
               putpixel( x+Px, y+Py, 0                        );
 | 
			
		||||
        else
 | 
			
		||||
               putpixel( x+Px, y+Py, *(BitMap_Ptr + x + y*33) );
 | 
			
		||||
    else
 | 
			
		||||
       putpixel( x+Px, y+Py, 0 );
 | 
			
		||||
}
 | 
			
		||||
void asigna_modo_video(char modo)   /* asigna el modo de v<>deo indicado      */
 | 
			
		||||
{                                   /* en la variable "modo"                 */
 | 
			
		||||
  union REGS ent, sal;
 | 
			
		||||
 | 
			
		||||
  ent.h.al = modo;
 | 
			
		||||
  ent.h.ah = 0;
 | 
			
		||||
  int86(16, &ent, &sal);	    /* funci<63>n para asignar el modo de video */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void main(void)
 | 
			
		||||
{
 | 
			
		||||
 Pmovim far *Figuras;
 | 
			
		||||
 int  Direccion, O_K = 0;
 | 
			
		||||
 float MovAct;
 | 
			
		||||
 | 
			
		||||
 float x, y;
 | 
			
		||||
 // Inicializamos la Pantalla
 | 
			
		||||
 asigna_modo_video(0x13);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 if ( ( (Jugador) = (Pmovim far *)farmalloc( sizeof(Pmovim)*8 ) ) == NULL ) return ;
 | 
			
		||||
 | 
			
		||||
 if ( ( (Figuras) = (Pmovim far *)farcalloc( 8, sizeof(Pmovim) ) ) == NULL ) return ;
 | 
			
		||||
 | 
			
		||||
 if ( IniciaJugador( &Figuras, 8, "moves.pcx", 0 ) != OK ) return;
 | 
			
		||||
 | 
			
		||||
 // Mostramos los personajes en la pantalla
 | 
			
		||||
 | 
			
		||||
 Direccion = 0;
 | 
			
		||||
 MovAct = 0;
 | 
			
		||||
 float Incx=0, Incy=0;
 | 
			
		||||
 x = 0; y = 0;
 | 
			
		||||
 do
 | 
			
		||||
 {
 | 
			
		||||
  if ( kbhit() )
 | 
			
		||||
   if ( getch() == 0 )
 | 
			
		||||
  {
 | 
			
		||||
  switch( getch() )
 | 
			
		||||
  {
 | 
			
		||||
   case 72: //ARRIBA
 | 
			
		||||
           Direccion = 4;
 | 
			
		||||
           Incx = 0;
 | 
			
		||||
           Incy = -8;
 | 
			
		||||
           break;
 | 
			
		||||
   case 80: //ABAJO
 | 
			
		||||
           Direccion = 0;
 | 
			
		||||
           Incx = 0;
 | 
			
		||||
           Incy = 8;
 | 
			
		||||
           break;
 | 
			
		||||
   case 75: //IZQ
 | 
			
		||||
           Direccion = 2;
 | 
			
		||||
           Incx = -8;
 | 
			
		||||
           Incy = 0;
 | 
			
		||||
           break;
 | 
			
		||||
   case 77: //DER
 | 
			
		||||
           Direccion = 6;
 | 
			
		||||
           Incx = 8;
 | 
			
		||||
           Incy = 0;
 | 
			
		||||
           break;
 | 
			
		||||
   case 71:
 | 
			
		||||
           Direccion = 3;
 | 
			
		||||
           Incx = -5;
 | 
			
		||||
           Incy = -5;
 | 
			
		||||
           break;
 | 
			
		||||
   case 73:
 | 
			
		||||
           Direccion = 5;
 | 
			
		||||
           Incx = 2;
 | 
			
		||||
           Incy = -2;
 | 
			
		||||
           break;
 | 
			
		||||
   case 81:
 | 
			
		||||
           Direccion = 7;
 | 
			
		||||
           Incx = 2;
 | 
			
		||||
           Incy = 2;
 | 
			
		||||
           break;
 | 
			
		||||
   case 79:
 | 
			
		||||
           Direccion = 2;
 | 
			
		||||
           Incx = -2;
 | 
			
		||||
           Incy = 2;
 | 
			
		||||
           break;
 | 
			
		||||
 | 
			
		||||
   default:
 | 
			
		||||
           O_K = 1;
 | 
			
		||||
           break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
//     memset( video_buffer, 254, 320*200 );
 | 
			
		||||
 | 
			
		||||
  MuestraJugador( Jugador[Direccion].Frame[(int)MovAct], x, y, 1 );
 | 
			
		||||
  x += Incx; y += Incy; MovAct = (MovAct+=1); if ( MovAct >= 4 ) MovAct = 0;
 | 
			
		||||
  if ( x > 320-33 ) x = 320-33; if ( x < 0 ) x = 0;
 | 
			
		||||
  if ( y > 200-59 ) y = 200-59; if ( y < 0 ) y = 0;
 | 
			
		||||
  MuestraJugador( Jugador[Direccion].Frame[(int)MovAct], x, y, 0 );
 | 
			
		||||
  delay(100);
 | 
			
		||||
 } while( !O_K );
 | 
			
		||||
 | 
			
		||||
 farfree( Figuras );
 | 
			
		||||
 // Volvemos la pantalla a su estado normal
 | 
			
		||||
 asigna_modo_video(0x3);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 /**************************************************************************\
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  CargaPaleta                                                             *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Descripci<63>n:                                                            *|
 | 
			
		||||
|*              Carga la paleta con los colores por defecto                 *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Entradas: achivo PCX de donde cargar la paleta                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
			
		||||
|*            ERROR Algo va mal                                             *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
 \**************************************************************************/
 | 
			
		||||
int CargaPaleta(char *file )
 | 
			
		||||
{
 | 
			
		||||
 DacPalette256 Palette256;
 | 
			
		||||
 int index;
 | 
			
		||||
 FILE *fp;
 | 
			
		||||
 | 
			
		||||
 if ( (fp=fopen( file, "rb" ) ) == NULL )
 | 
			
		||||
                                                  return ERROR;
 | 
			
		||||
 | 
			
		||||
 if ( fseek( fp, -768L, SEEK_END ) == 0 )
 | 
			
		||||
 {
 | 
			
		||||
    for (index=0; index<256; index++)
 | 
			
		||||
    {
 | 
			
		||||
    // get the red component
 | 
			
		||||
    // get the green component
 | 
			
		||||
    // get the blue component
 | 
			
		||||
    // set components
 | 
			
		||||
    Palette256[index][0] = getc(fp) >> 2;
 | 
			
		||||
    Palette256[index][1] = getc(fp) >> 2;
 | 
			
		||||
    Palette256[index][2] = getc(fp) >> 2;
 | 
			
		||||
    } // end for index
 | 
			
		||||
 | 
			
		||||
 }
 | 
			
		||||
 setvgapalette256( &Palette256 );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 fclose( fp );
 | 
			
		||||
 return OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Setvgapalette256 sets the entire 256 color palette */
 | 
			
		||||
/* PalBuf contains RGB values for all 256 colors      */
 | 
			
		||||
/* R,G,B values range from 0 to 63	              */
 | 
			
		||||
/* Usage:					      */
 | 
			
		||||
/*  DacPalette256 dac256;			      */
 | 
			
		||||
/*						      */
 | 
			
		||||
/* setvgapalette256(&dac256);			      */
 | 
			
		||||
void setvgapalette256(DacPalette256 *PalBuf)
 | 
			
		||||
{
 | 
			
		||||
  struct REGPACK reg;
 | 
			
		||||
 | 
			
		||||
  reg.r_ax = 0x1012;
 | 
			
		||||
  reg.r_bx = 0;
 | 
			
		||||
  reg.r_cx = 256;
 | 
			
		||||
  reg.r_es = FP_SEG(PalBuf);
 | 
			
		||||
  reg.r_dx = FP_OFF(PalBuf);
 | 
			
		||||
  intr(0x10,®);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										204
									
								
								PCX.CPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								PCX.CPP
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,204 @@
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <graphics.h>
 | 
			
		||||
 | 
			
		||||
#define ERROR 1
 | 
			
		||||
#define OK    1
 | 
			
		||||
 | 
			
		||||
typedef unsigned char DacPalette256[256][3];
 | 
			
		||||
 | 
			
		||||
void setvgapalette256(DacPalette256 *PalBuf);
 | 
			
		||||
 | 
			
		||||
 DacPalette256 Palette256;
 | 
			
		||||
 | 
			
		||||
void InicializaSVGA(void);
 | 
			
		||||
extern int far _Cdecl Svga256_fdriver[];
 | 
			
		||||
int huge    DetectVGA256(){  return 2; }
 | 
			
		||||
 | 
			
		||||
int MuestraImagen( char *file );
 | 
			
		||||
int CargaPaleta(char *file );
 | 
			
		||||
 | 
			
		||||
void main( void )
 | 
			
		||||
{
 | 
			
		||||
 int index, salida;
 | 
			
		||||
 | 
			
		||||
   // Inicializamos el modo SVGA 640*480 256 c. ( VESA )
 | 
			
		||||
   InicializaSVGA();
 | 
			
		||||
   MuestraImagen( "DEMO.PCX" );
 | 
			
		||||
   while( !kbhit() );
 | 
			
		||||
 | 
			
		||||
   salida = 0;
 | 
			
		||||
   for( ; salida == 0; )
 | 
			
		||||
   {
 | 
			
		||||
     for (index=0; index<256; index++)
 | 
			
		||||
     {
 | 
			
		||||
      // set components
 | 
			
		||||
      if( Palette256[index][0]>0 ) Palette256[index][0]--;
 | 
			
		||||
      if( Palette256[index][1]>0 ) Palette256[index][1] --;
 | 
			
		||||
      if( Palette256[index][2]>0 ) Palette256[index][2] --;
 | 
			
		||||
      if( Palette256[index][0]==0 && Palette256[index][1]==0 && Palette256[index][2]==0 )
 | 
			
		||||
          salida = 1;
 | 
			
		||||
      else
 | 
			
		||||
          salida = 0;
 | 
			
		||||
     } // end for index
 | 
			
		||||
     setvgapalette256( &Palette256 );
 | 
			
		||||
     delay(50);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   closegraph();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define RES_X  640
 | 
			
		||||
#define RES_Y  480
 | 
			
		||||
 /**************************************************************************\
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  MuestraImagen                                                           *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Descripci<63>n:                                                            *|
 | 
			
		||||
|*              Descomprime y copia a la pagina indicada un PCX             *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Entradas: nombre de la imagen                                           *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
			
		||||
|*            ERROR Algo va mal                                             *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
 \**************************************************************************/
 | 
			
		||||
int MuestraImagen( char *file )
 | 
			
		||||
{
 | 
			
		||||
  int alto, ancho, contador;
 | 
			
		||||
  unsigned char byte;
 | 
			
		||||
  FILE *fp;
 | 
			
		||||
 | 
			
		||||
  CargaPaleta( file );
 | 
			
		||||
 | 
			
		||||
  if ( (fp = fopen( file,"rb")) != NULL )
 | 
			
		||||
  {
 | 
			
		||||
          // Saltamos la cabecera
 | 
			
		||||
          fseek( fp, 128, SEEK_SET );
 | 
			
		||||
 | 
			
		||||
          for(alto=0; alto<RES_Y; alto++)
 | 
			
		||||
          {
 | 
			
		||||
            for(ancho=0; ancho<RES_X; )
 | 
			
		||||
            {
 | 
			
		||||
              byte=getc(fp);
 | 
			
		||||
              if(byte<=0xC0)
 | 
			
		||||
              {
 | 
			
		||||
                putpixel (ancho, alto, byte);
 | 
			
		||||
                ancho++;
 | 
			
		||||
              } else {
 | 
			
		||||
                contador=byte&0x3F; byte=getc(fp);
 | 
			
		||||
                for(; contador>0; contador--)
 | 
			
		||||
                {
 | 
			
		||||
                  putpixel (ancho, alto, byte);
 | 
			
		||||
                  ancho++;
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          fclose(fp);
 | 
			
		||||
 | 
			
		||||
  } else return ERROR;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  return OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 /**************************************************************************\
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  CargaPaleta                                                             *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Descripci<63>n:                                                            *|
 | 
			
		||||
|*              Carga la paleta con los colores por defecto                 *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Entradas: achivo PCX de donde cargar la paleta                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Salidas:  OK    Todo ha ido bien                                        *|
 | 
			
		||||
|*            ERROR Algo va mal                                             *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
 \**************************************************************************/
 | 
			
		||||
int CargaPaleta(char *file )
 | 
			
		||||
{
 | 
			
		||||
 int index;
 | 
			
		||||
 FILE *fp;
 | 
			
		||||
 | 
			
		||||
 if ( (fp=fopen( file, "rb" ) ) == NULL )
 | 
			
		||||
                                                  return ERROR;
 | 
			
		||||
 | 
			
		||||
 if ( fseek( fp, -768L, SEEK_END ) == 0 )
 | 
			
		||||
 {
 | 
			
		||||
    for (index=0; index<256; index++)
 | 
			
		||||
    {
 | 
			
		||||
    // get the red component
 | 
			
		||||
    // get the green component
 | 
			
		||||
    // get the blue component
 | 
			
		||||
    // set components
 | 
			
		||||
    Palette256[index][0] = (getc(fp) >> 2)*64 / 256;
 | 
			
		||||
    Palette256[index][1] = (getc(fp) >> 2)*64 / 256;
 | 
			
		||||
    Palette256[index][2] = (getc(fp) >> 2)*64 / 256;
 | 
			
		||||
    } // end for index
 | 
			
		||||
 | 
			
		||||
 }
 | 
			
		||||
 setvgapalette256( &Palette256 );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 fclose( fp );
 | 
			
		||||
 return OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Setvgapalette256 sets the entire 256 color palette */
 | 
			
		||||
/* PalBuf contains RGB values for all 256 colors      */
 | 
			
		||||
/* R,G,B values range from 0 to 63	              */
 | 
			
		||||
/* Usage:					      */
 | 
			
		||||
/*  DacPalette256 dac256;			      */
 | 
			
		||||
/*						      */
 | 
			
		||||
/* setvgapalette256(&dac256);			      */
 | 
			
		||||
void setvgapalette256(DacPalette256 *PalBuf)
 | 
			
		||||
{
 | 
			
		||||
  struct REGPACK reg;
 | 
			
		||||
 | 
			
		||||
  reg.r_ax = 0x1012;
 | 
			
		||||
  reg.r_bx = 0;
 | 
			
		||||
  reg.r_cx = 256;
 | 
			
		||||
  reg.r_es = FP_SEG(PalBuf);
 | 
			
		||||
  reg.r_dx = FP_OFF(PalBuf);
 | 
			
		||||
  intr(0x10,®);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void InicializaSVGA(void) {
 | 
			
		||||
 | 
			
		||||
  int Gd = DETECT, Gm;
 | 
			
		||||
  int Drv, errorcode;
 | 
			
		||||
 | 
			
		||||
  installuserdriver("Svga256",DetectVGA256);
 | 
			
		||||
//	    registerfarbgidriver(Svga256_fdriver);
 | 
			
		||||
 | 
			
		||||
  initgraph(&Gd,&Gm,"");
 | 
			
		||||
 | 
			
		||||
  /* read result of initialization */
 | 
			
		||||
  errorcode = graphresult();
 | 
			
		||||
 | 
			
		||||
if (errorcode != grOk)  /* an error occurred */
 | 
			
		||||
{
 | 
			
		||||
   cprintf("Graphics error: %s\n", grapherrormsg(errorcode));
 | 
			
		||||
   cprintf("Presione una tecla para finalizar:");
 | 
			
		||||
   getch();
 | 
			
		||||
   exit(1);             /* return with error code */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
#MOVES 
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
*16/09/1994* 
 | 
			
		||||
 
 | 
			
		||||
ToDo: wwtcf? 
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								X_DEMO.PCX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								X_DEMO.PCX
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user