]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_ca.c
modified the thing a bit!
[16.git] / src / lib / 16_ca.c
index bb65c4a25b98fc957b3b17aa2a9053ee5ca61f8b..fc40735329ff3c65701d0b70139f9a5c5b3562f0 100644 (file)
@@ -29,7 +29,7 @@ loaded into the data segment
 \r
 =============================================================================\r
 */\r
-
+\r
 #include "src/lib/16_ca.h"\r
 //#include "ID_STRS.H"\r
 \r
@@ -74,9 +74,9 @@ byte          _seg    *audiosegs[NUMSNDCHUNKS];
 void           _seg    *grsegs[NUMCHUNKS];\r
 \r
 byte           far     grneeded[NUMCHUNKS];\r
-byte           ca_levelbit,ca_levelnum;\r
+byte           ca_levelbit,ca_levelnum;*/\r
 \r
-int                    profilehandle,debughandle;*/\r
+int                    profilehandle,debughandle;\r
 \r
 void   (*drawcachebox)         (char *title, unsigned numcache);\r
 void   (*updatecachebox)       (void);\r
@@ -173,17 +173,16 @@ long GRFILEPOS(int c)
 =\r
 ============================\r
 */\r
-/*++++\r
 void CA_OpenDebug(void)\r
 {\r
-       unlink("DEBUG.TXT");\r
-       debughandle = open("DEBUG.TXT", O_CREAT | O_WRONLY | O_TEXT);\r
+       unlink("debug.txt");\r
+       debughandle = open("debug.txt", O_CREAT | O_WRONLY | O_TEXT);\r
 }\r
 \r
 void CA_CloseDebug(void)\r
 {\r
-       close debughandle);\r
-}*/\r
+       close(debughandle);\r
+}\r
 \r
 \r
 \r
@@ -216,37 +215,49 @@ void CAL_GetGrChunkLength (int chunk)
 ==========================\r
 */\r
 \r
-boolean CA_FarRead (int handle, byte far *dest, dword length)\r
-{
+boolean CA_FarRead(int handle, byte huge *dest, dword length, mminfo_t *mm)\r
+{\r
        boolean flag;\r
-       if (length>0xffffl)\r
-               printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+       dword fat=0;
+       word segm=0;
+       //if(mm->EMSVer<0x40)\r
+       if(length>0xfffflu)
+       {
+               printf("File is a fat bakapee\n");
+               segm=(length%0xfffflu)-1;
+               fat=segm*0xfffflu;
+               length-=fat;\r
+//             printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+       }
 
-       __asm
+       if(!fat&&!segm)
        {\r
-               push    ds\r
-               mov     bx,[handle]\r
-               mov     cx,[WORD PTR length]\r
-               mov     dx,[WORD PTR dest]\r
-               mov     ds,[WORD PTR dest+2]\r
-               mov     ah,0x3f                         // READ w/handle\r
-               int     21h\r
-               pop     ds\r
-               jnc     good
-               mov     errno,ax
-               mov     flag,0
-               jmp End
+               __asm\r
+               {\r
+                       push    ds\r
+                       mov     bx,[handle]\r
+                       mov     cx,[WORD PTR length]\r
+                       mov     dx,[WORD PTR dest]\r
+                       mov     ds,[WORD PTR dest+2]\r
+                       mov     ah,0x3f                         // READ w/handle\r
+                       int     21h\r
+                       pop     ds\r
+                       jnc     good\r
+                       mov     errno,ax\r
+                       mov     flag,0\r
+                       jmp End\r
 good:\r
-               cmp     ax,[WORD PTR length]\r
-               je      done\r
-//             errno = EINVFMT;                        // user manager knows this is bad read\r
-               mov     flag,0
-               jmp End
-done:
-               mov     flag,1
-End:
-       }\r
-       return flag;\r
+                       cmp     ax,[WORD PTR length]\r
+                       je      done\r
+//                     errno = EINVFMT;                        // user manager knows this is bad read\r
+                       mov     flag,0\r
+                       jmp End\r
+done:\r
+                       mov     flag,1\r
+End:\r
+               }\r
+       return flag;
+       }else return 0;//todo: EXPAND!!!\r
 }\r
 \r
 \r
@@ -260,37 +271,49 @@ End:
 ==========================\r
 */\r
 \r
-boolean CA_FarWrite (int handle, byte far *source, dword length)\r
-{
+boolean CA_FarWrite(int handle, byte huge *source, dword length, mminfo_t *mm)\r
+{\r
        boolean flag;\r
-       if (length>0xffffl)\r
-               printf("CA_FarWrite doesn't support 64K reads yet!\n");
-\r
-       __asm
+       dword fat=0;
+       word segm=0;
+       //if(mm->EMSVer<0x40)\r
+       if(length>0xfffflu)
+       {
+               printf("File is a fat bakapee\n");
+               segm=(length%0xfffflu)-1;
+               fat=segm*0xfffflu;
+               length-=fat;\r
+//             printf("CA_FarRead doesn't support 64K reads yet!\n");\r
+       }\r
+
+       if(!fat&&!segm)
        {\r
-               push    ds\r
-               mov     bx,[handle]\r
-               mov     cx,[WORD PTR length]\r
-               mov     dx,[WORD PTR source]\r
-               mov     ds,[WORD PTR source+2]\r
-               mov     ah,0x40                 // WRITE w/handle\r
-               int     21h\r
-               pop     ds\r
-               jnc     good
-               mov     errno,ax\r
-               mov flag,0
-               jmp End\r
+               __asm\r
+               {\r
+                       push    ds\r
+                       mov     bx,[handle]\r
+                       mov     cx,[WORD PTR length]\r
+                       mov     dx,[WORD PTR source]\r
+                       mov     ds,[WORD PTR source+2]\r
+                       mov     ah,0x40                 // WRITE w/handle\r
+                       int     21h\r
+                       pop     ds\r
+                       jnc     good\r
+                       mov     errno,ax\r
+                       mov flag,0\r
+                       jmp End\r
 good:\r
-               cmp     ax,[WORD PTR length]\r
-               je      done\r
-       //errno = ENOMEM;                               // user manager knows this is bad write
-               mov     flag,0
-               jmp End\r
-done:
-               mov     flag,1
+                       cmp     ax,[WORD PTR length]\r
+                       je      done\r
+                       //errno = ENOMEM;                               // user manager knows this is bad write\r
+                       mov     flag,0\r
+                       jmp End\r
+done:\r
+                       mov     flag,1\r
 End:\r
-       }
-       return flag;\r
+               }\r
+       return flag;
+       }else return 0;\r
 }\r
 \r
 \r
@@ -304,7 +327,7 @@ End:
 ==========================\r
 */\r
 \r
-boolean CA_ReadFile(char *filename, memptr *ptr)\r
+boolean CA_ReadFile(char *filename, memptr *ptr, mminfo_t *mm)\r
 {\r
        int handle;\r
        dword size;\r
@@ -313,7 +336,7 @@ boolean CA_ReadFile(char *filename, memptr *ptr)
                return false;\r
 \r
        size = filelength(handle);\r
-       if(!CA_FarRead(handle,*ptr,size))\r
+       if(!CA_FarRead(handle,*ptr,size, mm))\r
        {\r
                close(handle);\r
                return false;\r
@@ -334,7 +357,7 @@ boolean CA_ReadFile(char *filename, memptr *ptr)
 ==========================\r
 */\r
 \r
-boolean CA_LoadFile(char *filename, memptr *ptr)\r
+boolean CA_LoadFile(char *filename, memptr *ptr, mminfo_t *mm, mminfotype *mmi)\r
 {\r
        int handle;\r
        long size;\r
@@ -343,10 +366,10 @@ boolean CA_LoadFile(char *filename, memptr *ptr)
                return false;\r
 \r
        size = filelength (handle);\r
-       MM_GetPtr (ptr,size);\r
-       if(!CA_FarRead (handle,*ptr,size))\r
+       MM_GetPtr(ptr,size, mm, mmi);\r
+       if(!CA_FarRead(handle,*ptr,size, mm))\r
        {\r
-               close (handle);\r
+               close(handle);\r
                return false;\r
        }\r
        close(handle);\r
@@ -436,8 +459,8 @@ void CAL_OptimizeNodes(huffnode *table)
 //--------------------------\r
 // expand less than 64k of data\r
 //--------------------------\r
-
-       __asm
+\r
+       __asm\r
        {\r
                mov     bx,[headptr]\r
 \r
@@ -481,7 +504,7 @@ asm inc     di                                      // write a decopmpressed byte out
 asm    mov     bx,[headptr]            // back to the head node for next bit\r
 \r
 asm    cmp     di,ax                           // done?\r
-asm    jne     expandshort
+asm    jne     expandshort\r
        }\r
        }\r
        else\r
@@ -492,8 +515,8 @@ asm jne     expandshort
 //--------------------------\r
 \r
   length--;\r
-
-       __asm
+\r
+       __asm\r
        {\r
 asm mov        bx,[headptr]\r
 asm    mov     cl,1\r
@@ -551,11 +574,11 @@ asm       dec     [WORD PTR ss:length+2]
 asm    jns     expand          // when length = ffff ffff, done\r
        }\r
        }\r
-
-       __asm
+\r
+       __asm\r
        {\r
                mov     ax,ss\r
-               mov     ds,ax
+               mov     ds,ax\r
        }\r
 \r
 }*/\r
@@ -1101,7 +1124,7 @@ void CA_Shutdown(void)
 =\r
 ======================\r
 */\r
-/*++++
+/*++++\r
 void CA_CacheAudioChunk (int chunk)\r
 {\r
        long    pos,compressed;\r
@@ -1182,7 +1205,7 @@ done:
 =\r
 ======================\r
 */\r
-/*++++
+/*++++\r
 void CA_LoadAllSounds (void)\r
 {\r
        unsigned        start,i;\r