unsigned _RTL_FUNC _dos_read(int __fd, void *__buf, unsigned __len, unsigned *__nread) { DPMI_REGS regs; int mod = __len %__dtabuflen,i, tsize = 0; for (i=0; i < (__len & -__dtabuflen); i += __dtabuflen) { regs.h.dx = 0; regs.h.bx = __fd; regs.h.cx = __dtabuflen; __doscall(0x3f,®s); if (regs.h.flags & 1) return errno = regs.b.al ; __dtatobuf((char *)__buf+i,__dtabuflen); tsize += regs.h.ax; if (regs.h.ax < __dtabuflen) { *__nread = tsize ; return 0 ; } } regs.h.dx = 0; regs.h.bx = __fd; regs.h.cx = mod; __doscall(0x3f,®s); tsize += regs.h.ax; if (regs.h.flags & 1) return errno = regs.b.al ; __dtatobuf((char *)__buf+i,mod); *__nread = tsize ; return 0; }
int __ll_creat(char *name, int flags, int shflags) { DPMI_REGS regs; regs.d.ecx = 0; regs.h.dx = __nametodta(name,0); return __doscall(0x3c,®s); }
int __ll_writeable(const char *file) { DPMI_REGS regs; regs.b.al = 0 ; regs.h.dx = __nametodta(file,0) ; __doscall(0x43,®s); if (regs.b.al != 0) return 1 ; return !(regs.h.cx & 1) ; }
unsigned _RTL_FUNC _dos_creat(const char *__pathP, unsigned __attr, int *__fd) { DPMI_REGS regs; regs.d.ecx = __attr; regs.h.dx = __nametodta(__pathP,0); if (!__doscall(0x3c,®s)) { errno = regs.b.al ; return regs.b.al ; } *__fd = regs.h.ax ; return 0 ; }
size_t __ll_getpos(int fd) { DPMI_REGS regs; regs.h.bx = fd; regs.h.dx =0; regs.h.cx = 0; regs.b.al=1; __doscall(0x42,®s); if (regs.h.flags & 1) return -1; return ((regs.h.dx << 16) + regs.h.ax); }
int __ll_remove(char *name) { DPMI_REGS regs; regs.h.dx = __nametodta(name,0); __doscall(0x41,®s); if (regs.h.flags & 1) { errno = regs.h.ax & 255; return 1; } return 0; }
unsigned _RTL_FUNC _dos_setfileattr(const char *__filename,unsigned __attrib) { DPMI_REGS regs ; regs.h.ax = 01 ; regs.h.cx = __attrib ; regs.h.dx = __nametodta(__filename,0); __doscall(0x43,®s); if (regs.h.flags & 1) { errno = ENOENT ; return regs.b.al ; } return 0 ; }
int __ll_seek(int fd, size_t pos, int origin) { DPMI_REGS regs; regs.h.bx = fd; regs.h.cx = pos >> 16; regs.h.dx = pos & 65535; regs.b.al = origin; __doscall(0x42,®s); if (regs.h.flags & 1) return -1; return 0; }