X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_ca.c;h=fe76ec2c4ad5f8ef5184824ca3b6556708715766;hb=1ac770860f019965706c1c3e07df40ff9849dfb0;hp=e2963290a8a8f40d2e42861c58e6d252245a76a7;hpb=805fdac96cc084ef7c125a6dca0ca07c24bec520;p=16.git diff --git a/src/lib/16_ca.c b/src/lib/16_ca.c index e2963290..fe76ec2c 100644 --- a/src/lib/16_ca.c +++ b/src/lib/16_ca.c @@ -216,43 +216,47 @@ void CAL_GetGrChunkLength (int chunk) ========================== */ -boolean CA_FarRead (int handle, byte huge *dest, dword length) +boolean CA_FarRead(int handle, byte huge *dest, dword length) { boolean flag; dword fat=0; word segm=0; - while(length>0xffffl) + if(length>0xfffflu) { - fat=length-0xffffl; - segm++; + segm=(length%0xfffflu)-1; + fat=segm*0xfffflu; + length-=fat; // printf("CA_FarRead doesn't support 64K reads yet!\n"); } - - __asm + + if(!fat&&!segm) { - 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 + __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 good: - cmp ax,[WORD PTR length] - je done -// errno = EINVFMT; // user manager knows this is bad read - mov flag,0 - jmp End + 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 + mov flag,1 End: - } - return flag; + } + return flag; + }else return 0;//todo: EXPAND!!! } @@ -266,43 +270,47 @@ End: ========================== */ -boolean CA_FarWrite (int handle, byte huge *source, dword length) +boolean CA_FarWrite(int handle, byte huge *source, dword length) { boolean flag; dword fat=0; word segm=0; - while(length>0xffffl) + if(length>0xfffflu) { - fat=length-0xffffl; - segm++; + segm=(length%0xfffflu)-1; + fat=segm*0xfffflu; + length-=fat; // printf("CA_FarRead doesn't support 64K reads yet!\n"); } - - __asm + + if(!fat&&!segm) { - 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 + __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 good: - cmp ax,[WORD PTR length] - je done - //errno = ENOMEM; // user manager knows this is bad write - mov flag,0 - jmp End + 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 + mov flag,1 End: - } - return flag; + } + return flag; + }else return 0; }