Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 1571 → Rev 1572

/sved/trunk/libc.c
50,43 → 50,6
}
 
 
unsigned short _dos_freemem(unsigned short segn) {
unsigned short res = 0;
_asm {
push es
mov ah, 0x49
mov es, segn
int 0x21
pop es
jnc done
mov res, ax
done:
}
return(res);
}
 
 
unsigned short mdr_dos_allocmem(unsigned short siz) {
unsigned short segnum = 0;
 
_asm {
push bx
 
mov ah, 0x48
mov bx, siz
int 0x21
jc done
mov segnum, ax
 
done:
 
pop bx
}
 
return(segnum);
}
 
 
unsigned short mdr_dos_resizeblock(unsigned short siz, unsigned short segn) {
unsigned short res = 0;
 
/sved/trunk/libc.h
9,8 → 9,6
void fmemmove(void far *dst, const void far *src, size_t len);
unsigned short mdr_dos_fopen(const char *fname, unsigned short *fhandle);
unsigned short mdr_dos_fclose(unsigned short handle);
unsigned short _dos_freemem(unsigned short segn);
unsigned short mdr_dos_allocmem(unsigned short siz);
unsigned short mdr_dos_resizeblock(unsigned short siz, unsigned short segn);
unsigned short mdr_dos_read(unsigned short handle, void far *buf, unsigned short count, unsigned short *bytes);
 
/sved/trunk/sved.c
89,7 → 89,36
};
 
 
 
/*****************************************************************************
* assembly "functions" *
*****************************************************************************/
 
unsigned short dosalloc(unsigned short siz);
 
#pragma aux dosalloc = \
"mov ah, 0x48" \
"int 0x21" \
"jnc done" \
"xor ax, ax" \
"done:" \
parm [bx] \
value [ax];
 
 
unsigned short dosfree(unsigned short segn);
 
#pragma aux dosfree = \
"mov ah, 0x49" \
"int 0x21" \
"jc done" \
"xor ax, ax" \
"done:" \
parm [es] \
value [ax];
 
 
/*****************************************************************************
* functions *
*****************************************************************************/
 
97,7 → 126,7
struct line far *res;
unsigned short seg;
 
seg = mdr_dos_allocmem((sizeof(struct line) + siz + 15) / 16);
seg = dosalloc((sizeof(struct line) + siz + 15) / 16);
if (seg == 0) return(NULL);
res = MK_FP(seg, 0);
res->len = 0;
109,7 → 138,7
 
 
static void line_free(struct line far *ptr) {
_dos_freemem(FP_SEG(ptr));
dosfree(FP_SEG(ptr));
}