home *** CD-ROM | disk | FTP | other *** search
- /* (c) 1985, Phoenix Computer Products Corp. and Novum Organum, Inc. */
- #include <stdlib.h>
- #include "pdefs.h"
-
- ushort sydptrse(), sydptrof();
-
- #define SEEKERR (-1L)
- #define LSEEK 0x4200
-
- int dosopen(fnam,iomode)
- char *fnam;
- int iomode;
- {
- REGIS regs;
- int dosgate();
-
- regs.ax = 0x3d00 | iomode;
- if (_osmajor < 3) regs.ax &= 0xff03;
- regs.ds = sydptrse(fnam);
- regs.dx = sydptrof(fnam);
- return ((dosgate(®s)==RC_FAIL) ? RC_FAIL : (int) regs.ax);
- }
-
- int doscreate(fnam, dir_mode)
- char *fnam;
- int dir_mode;
- {
- REGIS regs;
- int dosgate();
-
- regs.ax = 0x3C00;
- regs.cx = dir_mode;
- regs.ds = sydptrse(fnam);
- regs.dx = sydptrof(fnam);
- return ((dosgate(®s)==RC_FAIL) ? RC_FAIL : (int) regs.ax);
- }
-
- int dosread (buf, n, fd)
- char *buf;
- int n, fd;
- {
- REGIS regs;
- int rc;
-
- regs.ax = 0x3F00;
- regs.bx = fd;
- regs.cx = n;
- regs.ds = sydptrse(buf);
- regs.dx = sydptrof(buf);
- rc = dosgate(®s);
-
- if ((rc==RC_FAIL) || (regs.ax < 0))
- sylongjmp(SE_BADREAD);
-
- return ((int) regs.ax);
- }
-
- long dosseek(fd, lpos, mode)
- int fd, mode;
- long lpos;
- {
- REGIS regs;
- long new_pos;
-
- regs.ax = LSEEK | LOBYTE(mode);
- regs.bx = fd;
- regs.cx = (uint)(lpos>>16);
- regs.dx = (uint) lpos;
-
- if (dosgate(®s)==RC_SUCCESS)
- new_pos = (((long)regs.dx)<<16) | (long) regs.ax;
- else
- sylongjmp(SE_BADSEEK);
- return (new_pos);
- }
-
- int doswrite(buf,n,fd)
- char *buf;
- int n, fd;
- {
- REGIS regs;
- int rc;
-
- regs.ax = 0x4000;
- regs.bx = fd;
- regs.cx = n;
- regs.ds = sydptrse(buf);
- regs.dx = sydptrof(buf);
- rc = dosgate(®s);
- if ((rc==RC_FAIL) || (regs.ax < n))
- sylongjmp(SE_BADWRITE);
- return(n);
- }
-
- int dosclose(fd)
- int fd;
- {
- REGIS regs;
-
- regs.ax = 0x3E00;
- regs.bx = fd;
-
- return ((dosgate(®s)==RC_FAIL) ? RC_FAIL : (int) regs.ax);
- }
-
- dosckpt(fd)
- {
- int dup_fd;
-
- dup_fd = dosfddup(fd);
- if (dup_fd > 0)
- dosclose (dup_fd);
- }
-
- dosfddup(fd)
- int fd;
- {
- REGIS regs;
-
- regs.ax = 0x4500;
- regs.bx = fd;
- return ((dosgate(®s)==RC_FAIL) ? RC_FAIL : (int) regs.ax);
- }
-
-
-