X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_ca.c;h=e1555f2f4566e11090f186df3242573f09ef3e1d;hb=3d36f50834f46234bb598624e526e97d5bf9678f;hp=bb65c4a25b98fc957b3b17aa2a9053ee5ca61f8b;hpb=17998320acbe20dc2bbca909922109fc65e82e9f;p=16.git diff --git a/src/lib/16_ca.c b/src/lib/16_ca.c old mode 100644 new mode 100755 index bb65c4a2..e1555f2f --- a/src/lib/16_ca.c +++ b/src/lib/16_ca.c @@ -29,9 +29,12 @@ loaded into the data segment ============================================================================= */ - + #include "src/lib/16_ca.h" -//#include "ID_STRS.H" +#pragma hdrstop + +#pragma warn -pro +#pragma warn -use //#define THREEBYTEGRSTARTS @@ -74,9 +77,7 @@ byte _seg *audiosegs[NUMSNDCHUNKS]; void _seg *grsegs[NUMCHUNKS]; byte far grneeded[NUMCHUNKS]; -byte ca_levelbit,ca_levelnum; - -int profilehandle,debughandle;*/ +byte ca_levelbit,ca_levelnum;*/ void (*drawcachebox) (char *title, unsigned numcache); void (*updatecachebox) (void); @@ -173,17 +174,22 @@ long GRFILEPOS(int c) = ============================ */ -/*++++ -void CA_OpenDebug(void) +void CA_OpenDebug(global_game_variables_t *gvar) { - unlink("DEBUG.TXT"); - debughandle = open("DEBUG.TXT", O_CREAT | O_WRONLY | O_TEXT); +#ifdef __BORLANDC__ + unlink("debug.16b"); + gvar->handle.debughandle = open("debug.16b", O_CREAT | O_WRONLY | O_TEXT); +#endif +#ifdef __WATCOMC__ + unlink("debug.16w"); + gvar->handle.debughandle = open("debug.16w", O_CREAT | O_WRONLY | O_TEXT); +#endif } -void CA_CloseDebug(void) +void CA_CloseDebug(global_game_variables_t *gvar) { - close debughandle); -}*/ + close(gvar->handle.debughandle); +} @@ -216,36 +222,64 @@ void CAL_GetGrChunkLength (int chunk) ========================== */ -boolean CA_FarRead (int handle, byte far *dest, dword length) -{ +boolean CA_FarRead(int handle, byte huge *dest, dword length, mminfo_t *mm) +{ boolean flag; - if (length>0xffffl) - printf("CA_FarRead doesn't support 64K reads yet!\n"); - - __asm + //dword fat=0; + //word segm=0; + //if(mm->EMSVer<0x40) + if(length>0xfffflu) { - push ds - mov bx,[handle] - mov cx,[WORD PTR length] - mov dx,[WORD PTR dest] - mov ds,[WORD PTR dest+2] - mov ah,0x3f // READ w/handle - int 21h - pop ds - jnc good - mov errno,ax - mov flag,0 - jmp End -good: - cmp ax,[WORD PTR length] - je done -// errno = EINVFMT; // user manager knows this is bad read - mov flag,0 - jmp End -done: - mov flag,1 -End: + printf("File is a fat bakapee\n"); + //segm=(length%0xfffflu)-1; + //fat=segm*0xfffflu; + //length-=fat; +// printf("CA_FarRead doesn't support 64K reads yet!\n"); + return 0;//todo: EXPAND!!! } + + //if(!fat&&!segm) + //{ + __asm { + push ds + mov bx,[handle] + mov cx,[WORD PTR length] + mov dx,[WORD PTR dest] + mov ds,[WORD PTR dest+2] + mov ah,0x3f // READ w/handle + int 21h + pop ds + jnc good + mov errno,ax + mov flag,0 + jmp End +#ifdef __BORLANDC__ + } +#endif +good: +#ifdef __BORLANDC__ + __asm { +#endif + cmp ax,[WORD PTR length] + je done +// errno = EINVFMT; // user manager knows this is bad read + mov flag,0 + jmp End +#ifdef __BORLANDC__ + } +#endif +done: +#ifdef __BORLANDC__ + __asm { +#endif + mov flag,1 +#ifdef __BORLANDC__ + } +#endif +End: +#ifdef __WATCOMC__ + } +#endif return flag; } @@ -260,36 +294,64 @@ End: ========================== */ -boolean CA_FarWrite (int handle, byte far *source, dword length) -{ +boolean CA_FarWrite(int handle, byte huge *source, dword length, mminfo_t *mm) +{ boolean flag; - if (length>0xffffl) - printf("CA_FarWrite doesn't support 64K reads yet!\n"); - - __asm + //dword fat=0; + //word segm=0; + //if(mm->EMSVer<0x40) + if(length>0xfffflu) { - push ds - mov bx,[handle] - mov cx,[WORD PTR length] - mov dx,[WORD PTR source] - mov ds,[WORD PTR source+2] - mov ah,0x40 // WRITE w/handle - int 21h - pop ds - jnc good - mov errno,ax - mov flag,0 - jmp End + printf("File is a fat bakapee\n"); + //segm=(length%0xfffflu)-1; + //fat=segm*0xfffflu; + //length-=fat; +// printf("CA_FarRead doesn't support 64K reads yet!\n"); + return 0; + } + + //if(!fat&&!segm) + //{ + __asm { + push ds + mov bx,[handle] + mov cx,[WORD PTR length] + mov dx,[WORD PTR source] + mov ds,[WORD PTR source+2] + mov ah,0x40 // WRITE w/handle + int 21h + pop ds + jnc good + mov errno,ax + mov flag,0 + jmp End +#ifdef __BORLANDC__ + } +#endif good: - cmp ax,[WORD PTR length] - je done - //errno = ENOMEM; // user manager knows this is bad write - mov flag,0 - jmp End -done: - mov flag,1 +#ifdef __BORLANDC__ + __asm { +#endif + cmp ax,[WORD PTR length] + je done + //errno = ENOMEM; // user manager knows this is bad write + mov flag,0 + jmp End +#ifdef __BORLANDC__ + } +#endif +done: +#ifdef __BORLANDC__ + __asm { +#endif + mov flag,1 +#ifdef __BORLANDC__ + } +#endif End: - } +#ifdef __WATCOMC__ + } +#endif return flag; } @@ -304,16 +366,17 @@ End: ========================== */ -boolean CA_ReadFile(char *filename, memptr *ptr) +boolean CA_ReadFile(char *filename, memptr *ptr, mminfo_t *mm) { int handle; - dword size; + sdword size; + //long size; if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1) return false; size = filelength(handle); - if(!CA_FarRead(handle,*ptr,size)) + if(!CA_FarRead(handle,*ptr,size, mm)) { close(handle); return false; @@ -334,19 +397,20 @@ boolean CA_ReadFile(char *filename, memptr *ptr) ========================== */ -boolean CA_LoadFile(char *filename, memptr *ptr) +boolean CA_LoadFile(char *filename, memptr *ptr, mminfo_t *mm, mminfotype *mmi) { int handle; - long size; + sdword size; + //long size; if((handle = open(filename,O_RDONLY | O_BINARY, S_IREAD)) == -1) return false; size = filelength (handle); - MM_GetPtr (ptr,size); - if(!CA_FarRead (handle,*ptr,size)) + MM_GetPtr(ptr,size, mm, mmi); + if(!CA_FarRead(handle,*ptr,size, mm)) { - close (handle); + close(handle); return false; } close(handle); @@ -436,8 +500,8 @@ void CAL_OptimizeNodes(huffnode *table) //-------------------------- // expand less than 64k of data //-------------------------- - - __asm + + __asm { mov bx,[headptr] @@ -481,7 +545,7 @@ asm inc di // write a decopmpressed byte out asm mov bx,[headptr] // back to the head node for next bit asm cmp di,ax // done? -asm jne expandshort +asm jne expandshort } } else @@ -492,8 +556,8 @@ asm jne expandshort //-------------------------- length--; - - __asm + + __asm { asm mov bx,[headptr] asm mov cl,1 @@ -551,11 +615,11 @@ asm dec [WORD PTR ss:length+2] asm jns expand // when length = ffff ffff, done } } - - __asm + + __asm { mov ax,ss - mov ds,ax + mov ds,ax } }*/ @@ -1019,12 +1083,20 @@ asm mov ds,ax ====================== */ -void CA_Startup(void) +void CA_Startup(global_game_variables_t *gvar) { #ifdef PROFILE - unlink("PROFILE.TXT"); - profilehandle = open("PROFILE.TXT", O_CREAT | O_WRONLY | O_TEXT); +#ifdef __BORLANDC__ + unlink("profile.16b"); + gvar->handle.profilehandle = open("profile.16b", O_CREAT | O_WRONLY | O_TEXT); +#endif +#ifdef __WATCOMC__ + unlink("profile.16w"); + gvar->handle.profilehandle = open("profile.16w", O_CREAT | O_WRONLY | O_TEXT); +#endif #endif +// unlink("debug0.16"); +// gvar->handle.showmemhandle = open("debug0.16", O_CREAT | O_WRONLY | O_TEXT); /*++++ // MDM begin - (GAMERS EDGE) // @@ -1081,11 +1153,12 @@ void CA_Startup(void) ====================== */ -void CA_Shutdown(void) +void CA_Shutdown(global_game_variables_t *gvar) { #ifdef PROFILE - close(profilehandle); + close(gvar->handle.profilehandle); #endif +// close(gvar->handle.showmemhandle); /*++++ close(maphandle); close(grhandle); @@ -1101,7 +1174,7 @@ void CA_Shutdown(void) = ====================== */ -/*++++ +/*++++ void CA_CacheAudioChunk (int chunk) { long pos,compressed; @@ -1182,7 +1255,7 @@ done: = ====================== */ -/*++++ +/*++++ void CA_LoadAllSounds (void) { unsigned start,i;