Windows.


- 5


pcx->imagebytes= (unsigned int) (pcx->width*pcx->height) ;

if(pcx->imagebytes > PCX_MAX_SIZE)

return PCX_TOOBIG;

pcx->bitmap= (char*)malloc(pcx->imagebytes);

if(pcx->bitmap == NULL)

return PCX_NOMEM;

p=pcx->bitmap;

for(i=0;i<pcx->imagebytes;i++)

{

if(mode == NORMAL)

{

abyte=fgetc(f);

if((unsigned char)abyte > Oxbf)

{ nbytes=abyte & 0x3f;

abyte=fgetc(f);

if(-nbytes > 0) mode=RLE ;

}

}

else if(--nbytes ==0)

mode=NORMAL;

*p++=abyte;

}

fseek(f,-768L,SEEK_END);

fread(pcx->pal,768,1, f) ;

p=pcx->pal;

for(i=0;i<768;i++) *p++=*p>>2;

fclose(f) ;

return PCX_OK;

}

//

void _interrupt NewInt9(void) {

register char x;

KeyScan=inp(Ox60);

x=inp(061) ;

outp(0x61,(x|0x80));

outp(0x61,x) ;

outp(020,020);

if(KeyScan == RIGHT__ARROW__REL ||

KeyScan == LEFT__ARROW_REL)

KeyScan=0;

}

//

void RestoreKeyboard(void) {

_dos_setvect(KEYBOARD,OldInt9);

}

//

void InitKeyboard(void)

{

Oldlnt9=_dos_getvect(KEYBOARD) ;

_dos_setvect(KEYBOARD,Newlnt9);

}

//

void SetAllRgbPalettefchar *pal)

{

struct SREGS s;

union REGS r;

segread(&s) ;

s.es=FP_SEG((void far*)pal);

r.x.dx=FP_OFF((void far*)pal);

r.x.ax=0xl012;

r.x.bx=0;

r.x.cx=256;

int86x(0xl0,&r,&r,&s) ;

}

//

void InitVideo()

{

union REGS r;

r.h.ah=0x0f;

int86(0xl0,&r,&r); PrevMode=r.h.al;

r.x.ax=0xl3;

int86(0xl0,&r,&r);

VideoRam=MK_FP(0xa000,0);

}

//

void RestoreVideo()

{

union REGS r;

r.x.ax=PrevMode;

int86(0xl0,&r,&r) ;

}

//

int InitBitmaps()

{

int r;

background=foreground=l;

r=ReadPcxFile("backgrnd.pcx",&pcx) ;

if(r != PCX_OK) return FALSE;

BackGroundBnip=pcx.bitmap ;

SetAllRgbPalette(pcx.pal); ,

r=ReadPcxFile("foregrnd.pcx",&pcx);

if(r != PCX_OK) return FALSE;

ForeGroundBmp=pcx.bitmap;

MemBuf=malloc(MEMBLK) ;

if(MemBuf == NULL) return FALSE;

memset(MemBuf,0, MEMBLK) ;

return TRUE;

) //

void FreeMem()